Код: Выделить всё
using (var g = Graphics.FromImage(resultImage))
{
g.DrawImage(firstImage, item.Rect, item.Rect, GraphicsUnit.Pixel);
}

Начинается самое интересное — когда прямоугольник, который я хочу скопировать, поворачивается. Номерные знаки в данном случае. Я пробовал несколько подходов, но полностью потерпел неудачу. первый подход был такой:
Код: Выделить всё
public static void CopyAndRotateImage(Bitmap fromBitmap, Graphics destGraphics, Rectangle rect, float rotationAngle)
{
using (var g = Graphics.FromImage(fromBitmap))
{
g.TranslateTransform(rect.X + rect.Width / 2, rect.Y);
g.RotateTransform(+rotationAngle);
g.TranslateTransform(-rect.X - rect.Width / 2, -rect.Y);
destGraphics.TranslateTransform(rect.X + rect.Width / 2, rect.Y);
destGraphics.RotateTransform(+rotationAngle);
destGraphics.TranslateTransform(-rect.X - rect.Width / 2, -rect.Y);
destGraphics.DrawImage(fromBitmap, rect, rect, GraphicsUnit.Pixel);
g.ResetTransform();
destGraphics.ResetTransform();
}
}

Это означает, что растровое изображение и графика не полностью связаны между собой. Методы преобразования, похоже, не влияют на растровое изображение. Итак, я посмотрел, что смог найти, и позже обнаружил, что могу создать новое растровое изображение из объекта Graphics:
Код: Выделить всё
public static void CopyAndRotateImage(Bitmap fromBitmap, Graphics destGraphics, Rectangle rect, float rotationAngle)
{
using (var g = Graphics.FromImage(fromBitmap))
{
g.TranslateTransform(rect.X + rect.Width / 2, rect.Y);
g.RotateTransform(+rotationAngle);
g.TranslateTransform(-rect.X - rect.Width / 2, -rect.Y);
destGraphics.TranslateTransform(rect.X + rect.Width / 2, rect.Y);
destGraphics.RotateTransform(+rotationAngle);
destGraphics.TranslateTransform(-rect.X - rect.Width / 2, -rect.Y);
using (Bitmap bitmap = new Bitmap(fromBitmap.Width, fromBitmap.Height, g))
{
destGraphics.DrawImage(bitmap, rect, rect, GraphicsUnit.Pixel);
}
g.ResetTransform();
destGraphics.ResetTransform();
}
}
Подробнее здесь: https://stackoverflow.com/questions/783 ... to-another