Cortar a imagem usando uma caixa de fotos arrastável de tamanho fixo

Eu estou trabalhando em um projeto winforms que envolve o corte de uma imagem. Meu objetivo é fazer isso usando um controle de caixa de figuras arrastável de tamanho fixo, permitindo que o usuário selecione a área que deseja preservar.

Meu problema é quando eu recorte a imagem; isto"trabalho", mas a área de cultivo compensa um pouco. Aqui está o resultado que recebo:

Para esclarecer, não estou falando sobre o zoom, isso é por design. Observe que a caixa laranja está focando principalmente no olho da tempestade, mas a imagem cortada não está.

Este é o meu código para a operação de colheita:

private void tsbRecortar_Click(object sender, EventArgs e)
{
    Rectangle recorte = new Rectangle(pbxSeleccion.Location.X, pbxSeleccion.Location.Y, pbxSeleccion.Width, pbxSeleccion.Height);

    foto = recortarImagen(foto, recorte);
    pbxImagen.Image = foto;
}

private Image recortarImagen(Image imagen, Rectangle recuadro)
{
    try
    {
        Bitmap bitmap = new Bitmap(imagen);
        Bitmap cropedBitmap = bitmap.Clone(recuadro, bitmap.PixelFormat);

        return (Image)(cropedBitmap);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error");

        return null;
    }
}

pbxSeleccion é o retângulo laranja arrastável; seu pai épbxImage (Eu re-pais na carga do formulário).

Como você pode ver, eu estou usando as coordenadas depbxSeleccion para definir o ponto de partida da área de corte, mas não está funcionando como esperado ... às vezes, até obtenho uma exceção "Sem memória".

Eu acho que isso tem a ver com a forma como a imagem carrega na caixa de imagem pai, algo sobre como a margem é tratada "sob o capô", mas nada que eu tentei corrigi-lo ... apenas muda a magnitude do deslocamento.

Pesquisando na web e SO me ajudou muito, mas para esta questão em particular, não consigo encontrar uma resposta ... por favor, sinta-se livre para apontar melhorias para o meu código, eu não tenho codificado por muito tempo e Eu sou novo em C # e .NET

Qualquer ajuda é muito apreciada. Felicidades!

questionAnswers(2)

yourAnswerToTheQuestion