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

发布于 2024-07-21 15:52:41 字数 586 浏览 10 评论 0原文

我正在尝试使用 C# 绘图命名空间并排绘制两个图像。 这是一个非常简单的示例,假设我们有两个高度相同的图像:

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();
}

如果两个旧图像的分辨率相同,则此方法可以正常工作。

但是,如果分辨率不同,则会调整图像大小,从而导致问题。 例如,如果第一张图像具有不同的分辨率,则第二张图像的位置将不正确。

有谁知道我如何轻松解决这个问题? 理想情况下,我希望原始图像的高度和宽度在绘制到新图像上时保持不变。

I am trying to draw two images side-by-side using the C# Drawing namespace.
Here is a very simple example that assumes we have two images of the same height:

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();
}

This works OK if the resolution of the two old images are the same.

However, if the resolutions are different then the image is resized, causing problems. For example, if the first image has a different resolution, then the second image will be positioned incorrectly.

Does anyone know how I can fix this problem easily? Ideally I want the original image's height and width to remain the same when they are drawn on to the new image.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

我做我的改变 2024-07-28 15:52:41

试试这个技巧:

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

Try this trick:

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
多情出卖 2024-07-28 15:52:41

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

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

Basically you'll need to resize the second image before adding to the new image.

Though as you say you want to retain the original height and width you'll need to change the canvas size of the second image. This increases the size of the image by adding empty space around the actual image. If the second image is larger than the first you'll need to do this to the first image instead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文