Przytnij obraz za pomocą przeciąganego boxu zdjęć o stałym rozmiarze
Pracuję nad projektem winforms, który obejmuje przycinanie obrazu. Moim celem jest użycie kontrolki Picturebox o stałym rozmiarze, która pozwala użytkownikowi wybrać obszar, który chce zachować.
Mój problem polega na tym, że przycinam obraz; to"Prace", ale obszar kadrowania trochę się zmienia. Oto rezultat, który otrzymuję:
Aby wyjaśnić, nie mówię o powiększaniu, to jest na projekt. Zauważ, że pomarańczowe pole skupia się głównie na oku burzy, ale przycięty obraz nie jest.
To jest mój kod dla operacji zbioru:
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 jest przeciągalnym pomarańczowym prostokątem; jego rodzicem jestpbxImage (Powracam do niego po załadowaniu formularza).
Jak widzisz, używam współrzędnychpbxSeleccion aby zdefiniować punkt początkowy obszaru kadrowania, ale nie działa zgodnie z oczekiwaniami ... czasami otrzymuję wyjątek „Brak pamięci”.
Myślę, że ma to związek z tym, jak obraz jest ładowany w nadrzędnym boxie obrazkowym, czymś, w jaki sposób margines jest obsługiwany „pod maską”, ale nic, co próbowałem, nie naprawia ... zmienia wielkość przesunięcia.
Przeszukiwanie sieci i SO bardzo mi pomogło, ale w tym konkretnym przypadku nie mogę znaleźć odpowiedzi ... proszę, nie krępuj się wskazać ulepszenia mojego kodu, nie kodowałem długo i Jestem nowy w C # i .NET
Każda pomoc jest bardzo ceniona. Twoje zdrowie!