Копирование прямоугольного изображения преобразованной/повернутой графики (растрового изображения) в другой преобразованC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Копирование прямоугольного изображения преобразованной/повернутой графики (растрового изображения) в другой преобразован

Сообщение Anonymous »

Функциональность, которую я хочу достичь, заключается в возможности скопировать прямоугольник из части изображения и вставить эту часть в другое изображение того же размера в том же месте. Я хочу использовать его для размытия частей изображения, которые могут содержать некоторые конфиденциальные данные, и одновременно иметь возможность сделать некоторые из этих данных видимыми. Это легко сделать с помощью:

Код: Выделить всё

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();
}
}
Он подходит к середине прямоугольника, поворачивает все, возвращается на то же место и выполняет копирование. Этот подход выглядел хорошо на бумаге, но конечным результатом в destGraphics является основное изображение без какого-либо поворота.
Изображение
Это означает, что растровое изображение и графика не полностью связаны между собой. Методы преобразования, похоже, не влияют на растровое изображение. Итак, я посмотрел, что смог найти, и позже обнаружил, что могу создать новое растровое изображение из объекта 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();
}
}
Но в данном случае кажется, что созданное растровое изображение имело только разрешение объекта Graphics и не принимало никаких данных из объекта Graphics. Я просматривал документацию, задавал вопросы ChatGbt, но не смог найти способ добиться того, что пытаюсь сделать. Любые идеи помогут.

Подробнее здесь: https://stackoverflow.com/questions/783 ... to-another
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»