C# 合并 4x 图像创建单个图像但使用这些特殊图像不起作用
C# Merging 4x images create single image but using these special images does not work
我已经编码,这样 4x 图像将合并为单个图像,尺寸将相加,以便最终图像确保它始终有 space 来容纳所有 4 个图像。
// Determining width and height
int widthF = Math.Max((globeVar.width1 + globeVar.width2), (globeVar.width3 + globeVar.width4));
int heightF = Math.Max((globeVar.height1 + globeVar.height2), (globeVar.height3 + globeVar.height4));
//Getting drawing objects ready
Image img = new Bitmap(widthF, heightF);
Graphics drawing = Graphics.FromImage(img);
//paint the background to check where image is not merged
drawing.Clear(Color.Blue);
drawing.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
// Draw the image to the graphics to create the new image
// Which will be used in the onpaint background
drawing.DrawImage(globeVar.image1, 0, 0);
drawing.DrawImage(globeVar.image2, (img.Width) / 2, 0);
drawing.DrawImage(globeVar.image3, 0, (img.Height) / 2);
drawing.DrawImage(globeVar.image4, (img.Width) / 2, (img.Height) / 2);
drawing.Save();
img.Save(@globeVar.savePath, ImageFormat.Png);
drawing.Dispose();
现在代码实际上适用于以下 4 张图像:
但是当我使用这些图像时,:
合并成这样:
我到底错过了什么?
编辑:
我用来选择图片的代码:
//Getting The Image From The System
OpenFileDialog open = new OpenFileDialog();
open.Filter =
"Image Files(*.jpg; *.jpeg; *.gif; *.png; *.bmp)|*.jpg; *.jpeg; *.gif; *.png; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap img = new Bitmap(open.FileName);
globeVar.image4 = Image.FromFile(open.FileName);
globeVar.width4 = img.Width;
globeVar.height4 = img.Height;
}
这是我用于全局变量的代码,它帮助我在项目中的任何地方使用它们:
public static class globeVar
{
public static int width1 = 0;
public static int width2 = 0;
public static int width3 = 0;
public static int width4 = 0;
public static int height1 = 0;
public static int height2 = 0;
public static int height3 = 0;
public static int height4 = 0;
public static Image image1;
public static Image image2;
public static Image image3;
public static Image image4;
public static string savePath = "C:\Users\Suleman\Desktop\ImageMerge\Sample Images\test.png";
//public static string savePath = "test.png";
}
我自己找到了答案。看起来 DrawImage 方法没有考虑图像的默认大小。所以我必须定义它们的原始大小才能成功合并。
我刚刚更新:
drawing.DrawImage(globeVar.image1, 0, 0, globeVar.width1, globeVar.height1);
drawing.DrawImage(globeVar.image2, (img.Width) / 2, 0, globeVar.width2, globeVar.height2);
drawing.DrawImage(globeVar.image3, 0, (img.Height) / 2, globeVar.width3, globeVar.height3);
drawing.DrawImage(globeVar.image4, (img.Width) / 2, (img.Height) / 2, globeVar.width4, globeVar.height4);
来自文档:
我之前用过: DrawImage(Image,‖Int32,‖Int32)
我现在用的是: DrawImage(Image,‖Int32,‖Int32,‖Int32,‖Int32)
我已经编码,这样 4x 图像将合并为单个图像,尺寸将相加,以便最终图像确保它始终有 space 来容纳所有 4 个图像。
// Determining width and height
int widthF = Math.Max((globeVar.width1 + globeVar.width2), (globeVar.width3 + globeVar.width4));
int heightF = Math.Max((globeVar.height1 + globeVar.height2), (globeVar.height3 + globeVar.height4));
//Getting drawing objects ready
Image img = new Bitmap(widthF, heightF);
Graphics drawing = Graphics.FromImage(img);
//paint the background to check where image is not merged
drawing.Clear(Color.Blue);
drawing.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
// Draw the image to the graphics to create the new image
// Which will be used in the onpaint background
drawing.DrawImage(globeVar.image1, 0, 0);
drawing.DrawImage(globeVar.image2, (img.Width) / 2, 0);
drawing.DrawImage(globeVar.image3, 0, (img.Height) / 2);
drawing.DrawImage(globeVar.image4, (img.Width) / 2, (img.Height) / 2);
drawing.Save();
img.Save(@globeVar.savePath, ImageFormat.Png);
drawing.Dispose();
现在代码实际上适用于以下 4 张图像:
但是当我使用这些图像时,:
合并成这样:
我到底错过了什么?
编辑:
我用来选择图片的代码:
//Getting The Image From The System
OpenFileDialog open = new OpenFileDialog();
open.Filter =
"Image Files(*.jpg; *.jpeg; *.gif; *.png; *.bmp)|*.jpg; *.jpeg; *.gif; *.png; *.bmp";
if (open.ShowDialog() == DialogResult.OK)
{
Bitmap img = new Bitmap(open.FileName);
globeVar.image4 = Image.FromFile(open.FileName);
globeVar.width4 = img.Width;
globeVar.height4 = img.Height;
}
这是我用于全局变量的代码,它帮助我在项目中的任何地方使用它们:
public static class globeVar
{
public static int width1 = 0;
public static int width2 = 0;
public static int width3 = 0;
public static int width4 = 0;
public static int height1 = 0;
public static int height2 = 0;
public static int height3 = 0;
public static int height4 = 0;
public static Image image1;
public static Image image2;
public static Image image3;
public static Image image4;
public static string savePath = "C:\Users\Suleman\Desktop\ImageMerge\Sample Images\test.png";
//public static string savePath = "test.png";
}
我自己找到了答案。看起来 DrawImage 方法没有考虑图像的默认大小。所以我必须定义它们的原始大小才能成功合并。
我刚刚更新:
drawing.DrawImage(globeVar.image1, 0, 0, globeVar.width1, globeVar.height1);
drawing.DrawImage(globeVar.image2, (img.Width) / 2, 0, globeVar.width2, globeVar.height2);
drawing.DrawImage(globeVar.image3, 0, (img.Height) / 2, globeVar.width3, globeVar.height3);
drawing.DrawImage(globeVar.image4, (img.Width) / 2, (img.Height) / 2, globeVar.width4, globeVar.height4);
来自文档:
我之前用过: DrawImage(Image,‖Int32,‖Int32)
我现在用的是: DrawImage(Image,‖Int32,‖Int32,‖Int32,‖Int32)