Я написал небольшое приложение, которое будет использоваться в моей рабочей среде для обрезки изображений. Форма окна (.NET 3.5), которая содержит изображение, имеет прозрачный прямоугольник, который я использую для перетаскивания части изображения и нажатия кнопки, чтобы получить то, что было за прямоугольником.
В настоящее время я использую приведенный ниже код, это вызывает у меня проблемы, поскольку область захвата отключена на несколько пикселей, и я думаю, что это связано с моей функцией CopyFromScreen.
//Pass in a rectangle
private void SnapshotImage(Rectangle rect)
{
Point ptPosition = new Point(rect.X, rect.Y);
Point ptRelativePosition;
//Get me the screen coordinates, so that I get the correct area
ptRelativePosition = PointToScreen(ptPosition);
//Create a new bitmap
Bitmap bmp = new Bitmap(rect.Width, rect.Height, PixelFormat.Format32bppArgb);
//Sort out getting the image
Graphics g = Graphics.FromImage(bmp);
//Copy the image from screen
g.CopyFromScreen(this.Location.X + ptPosition.X, this.Location.Y + ptPosition.Y, 0, 0, bmp.Size, CopyPixelOperation.SourceCopy);
//Change the image to be the selected image area
imageControl1.Image.ChangeImage(bmp);
}
Если кто-то может заметить, почему, когда изображение перерисовывается совсем немного, я был бы вечно благодарен за этот момент. Кроме того, функция ChangeImage
в порядке - она работает, если я использую форму в качестве области выбора, но использование прямоугольника немного потрясает.