C #: сохранить размер, несмотря на другое разрешение, используя Graphics.DrawImage - PullRequest
3 голосов
/ 01 июня 2009

Я пытаюсь нарисовать два изображения рядом, используя пространство имен C # Drawing. Вот очень простой пример, который предполагает, что у нас есть два изображения одинаковой высоты:

Image[] oldImages = GetOldImages();

var newImage = new Bitmap(oldImages[0].Width + oldImages[1].Width, 800);

using (var newImageGraphics = Graphics.FromImage(newImage))
{
    newImageGraphics.DrawImage(oldImages[0], 0, 0);
    newImageGraphics.DrawImage(oldImages[1], oldImage[0].Width, 0);
    newImageGraphics.Save();
}

Это работает нормально, если разрешение двух старых изображений одинаковое.

Однако, если разрешение отличается, размер изображения изменяется, что вызывает проблемы. Например, если первое изображение имеет другое разрешение, второе изображение будет расположено неправильно.

Кто-нибудь знает, как я могу легко решить эту проблему? В идеале я хочу, чтобы высота и ширина исходного изображения оставались неизменными при их рисовании на новом изображении.

Ответы [ 2 ]

4 голосов
/ 10 августа 2009

Попробуйте этот трюк:

Bitmap picture_1 = new Bitmap(picture_1_path);
Graphics graphics = Graphics.FromImage(picture_1);
Bitmap picture_2 = new Bitmap(picture_2_path);
picture_2.SetResolution(graphics.DpiX, graphics.DpiY);

//Then do with pictures anything
1 голос
/ 01 июня 2009

Как правило, вам нужно изменить размер второго изображения перед добавлением к новому изображению.

Хотя, как вы говорите, вы хотите сохранить первоначальную высоту и ширину, вам нужно изменить размер холста второго изображения. Это увеличивает размер изображения, добавляя пустое пространство вокруг фактического изображения. Если второе изображение больше первого, вам нужно сделать это с первым изображением.

...