Создание небольшого растрового изображения как части существующего
Я пытаюсь создать и показать часть существующего растрового изображения. При щелчке мыши над полем изображения отображается небольшой прямоугольник, который копируется в новое растровое изображение. Проблема в том, что новое растровое изображение имеет непредсказуемое смещение и не показывает точно содержимое прямоугольника. Я предполагаю, что проблема заключается в том, что я использую GraphicsUnit.Point вместо пиксельного формата, но при попытке использовать пиксельный формат я вижу только белый прямоугольник вместо изображения.
//Нажмите на picturebox исходного изображения
частная pictureBox1_Click недействительным(объект отправителя, EventArgs в электронной)
{
int x = ((MouseEventArgs)e).X;
int y = ((MouseEventArgs)e).Y;
m_Rectangle = новый прямоугольник(x, y, 20, 20);
имя picturebox1.Обновить();
m_Bitmap = CopyToBitmap();
}
//Отображение красного прямоугольника после щелчка пользователя
private void pictureBox1_Paint(отправитель объекта, PaintEventArgs e)
{
если (m_Rectangle != нуль)
{
ВАР г = е.Графика;
г. Объекта Drawrectangle(Ручки.Красный, m_Rectangle);
}
}
частное растровое изображение CopyToBitmap()
{
Источник растрового изображения = (Bitmap)pictureBox1.Image;
Прямоугольное сечение = новый прямоугольник(новая точка(m_Rectangle.Местоположение.Х ,m_Rectangle.Местоположение.Y), новый размер(20, 20));
Bitmap bmp = новое растровое изображение( раздел.Ширина, сечение.Высота, Пиксельформат.Format32bppArgb);
использование (графика g = графика.FromImage(bmp))
{
г. Функция drawImage(источник, раздел, m_Rectangle,GraphicsUnit.Точка);
}
//picLetter = поле изображения назначения
пиклеттер.Изображение = bmp;
пиклеттер.Освежить();
возвращение БМП;
}
Что я уже пробовал:
Я использую C# WinForms, .Net Framework 3.5. смещение позиции X не существует, и picturebox не показывает точно содержимое красного прямоугольника