Обрезать изображение с помощью перетаскиваемого изображения с фиксированным размером
Я работаю над проектом winforms, который включает в себя обрезку изображения. Моя цель - сделать это, используя перетаскиваемый элемент управления Picturebox фиксированного размера, позволяющий пользователю выбрать область, которую он хочет сохранить.
Моя проблема в том, когда я обрезаю изображение; Это"работает", но площадь посева немного смещается. Вот результат, который я получаю:
Чтобы уточнить, я не говорю о масштабировании, это по дизайну. Обратите внимание, что оранжевая рамка в основном фокусируется на глазу шторма, но обрезанное изображение - нет.
Это мой код для операции обрезки:
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 перетаскиваемый оранжевый прямоугольник; его родительpbxImage (Я переопределяю это при загрузке формы).
Как видите, я использую координатыpbxSeleccion определить начальную точку области обрезки, но не работает должным образом ... иногда я даже получаю исключение "Недостаточно памяти".
Я думаю, что это связано с тем, как изображение загружается в родительский Picturebox, что-то о том, как обрабатывается поле "под капотом", но ничего, что я пробовал, не исправляет это ... просто меняет величину смещения.
Поиск в Интернете и SO мне очень помогли, но по этой конкретной проблеме я не могу найти ответ ... пожалуйста, не стесняйтесь указывать на улучшения в моем коде, я давно не программировал и Я новичок в C # и .NET
Любая помощь высоко ценится. Ура!