C#:使用Graphics.DrawImage保留不同分辨率的大小

时间:2009-06-01 09:03:46

标签: c# graphics resolution drawimage

我正在尝试使用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 个答案:

答案 0 :(得分:4)

尝试这个技巧:

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 :(得分:1)

基本上,在添加到新图像之前,您需要调整第二张图像的大小。

虽然如您所说,您希望保留原始高度和宽度,但您需要更改第二张图像的画布大小。这通过在实际图像周围添加空白空间来增加图像的大小。如果第二张图像大于第一张图像,则需要对第一张图像执行此操作。