C#将多幅图像绘制到picturebox中,无需平铺
我正在尝试使用点将多个(20个或更多小图像)绘制到一个图片框中,但是当我这样做时,它会复制图片框每一行的顶行。 我到处都找遍了,也试过很多次,但是我想不出有谁能帮我指出正确的方向吗 我想要实现的是:C#将多幅图像绘制到picturebox中,无需平铺,c#,picturebox,drawimage,C#,Picturebox,Drawimage,我正在尝试使用点将多个(20个或更多小图像)绘制到一个图片框中,但是当我这样做时,它会复制图片框每一行的顶行。 我到处都找遍了,也试过很多次,但是我想不出有谁能帮我指出正确的方向吗 我想要实现的是: 图像1图像2图像3图像4图像1 图像2图像4图像1图像3图像3 图像4图像7图像2图像1图像6 图像3图像7图像3图像7图像6 然而,我得到的是: 图像1图像2图像3图像4图像1 图像1图像2图像3图像4图像1 图像1图像2图像3图像4图像1 图像1图像2图像3图像4图像1 (当然没有数字) 这是我
private void Form_Load(object sender, EventArgs e)
{
Image[] Files = new Image[7];
Bitmap a = new Bitmap(@"C:\icons\icon1.png");
Files[0] = new Bitmap(a, 80, 80);
image1 = Files[0];
Bitmap b = new Bitmap(@"C:\icons\icon2.png");
Files[1] = new Bitmap(b, 80, 80);
image2 = Files[1];
Bitmap c = new Bitmap(@"C:\icons\icon3.png");
Files[2] = new Bitmap(c, 80, 80);
image3 = Files[2];
Bitmap d = new Bitmap(@"C:\icons\icon4.png");
Files[3] = new Bitmap(d, 80, 80);
image4 = Files[3];
Bitmap h = new Bitmap(@"C:\icons\icon5.png");
Files[4] = new Bitmap(h, 80, 80);
image5 = Files[4];
Bitmap f = new Bitmap(@"C:\icons\icon6.png");
Files[5] = new Bitmap(f, 80, 80);
image6 = Files[5];
Bitmap g = new Bitmap(@"C:\icons\icon7.png");
Files[6] = new Bitmap(g, 80, 80);
image7 = Files[6];
pictureBox1.BackgroundImage = CombineBitmap(Files);
}
public static System.Drawing.Bitmap CombineBitmap(Image[] files)
{
List<System.Drawing.Bitmap> images = new List<System.Drawing.Bitmap>();
System.Drawing.Bitmap finalImage = null;
try
{
int width = 0;
int height = 0;
foreach (Image image in files)
{
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(image);
width += bitmap.Width;
height = bitmap.Height > height ? bitmap.Height : height;
images.Add(bitmap);
}
finalImage = new System.Drawing.Bitmap(width, height);
using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(finalImage))
{
g.Clear(System.Drawing.Color.Gray); // Change this to whatever you want the background color to be, you may set this to Color.Transparent as well
int offset = 15;
Point p1 = new Point(0, 0);
Point p2 = new Point(80, 0);
Point p3 = new Point(160, 0);
Point p4 = new Point(240, 0);
Point p5 = new Point(320, 0);
Point p6 = new Point(0, 80);
Point p7 = new Point(80, 80);
Point p8 = new Point(160, 80);
Point p9 = new Point(240, 80);
Point p10 = new Point(320, 80);
Point p11 = new Point(0, 160);
Point p12 = new Point(80, 160);
Point p13 = new Point(160, 160);
Point p14 = new Point(240, 160);
Point p15 = new Point(320, 160);
Point p16 = new Point(0, 240);
Point p17 = new Point(80, 240);
Point p18 = new Point(160, 240);
Point p19 = new Point(240, 240);
Point p20 = new Point(320, 240);
g.DrawImage(image1, p1);
g.DrawImage(image2, p2);
g.DrawImage(image3, p3);
g.DrawImage(image4, p4);
g.DrawImage(image1, p5);
g.DrawImage(image2, p6);
g.DrawImage(image4, p7);
g.DrawImage(image1, p8);
g.DrawImage(image3, p9);
g.DrawImage(image3, p10);
g.DrawImage(image4, p11);
g.DrawImage(image7, p12);
g.DrawImage(image2, p13);
g.DrawImage(image1, p14);
g.DrawImage(image6, p15);
g.DrawImage(image3, p16);
g.DrawImage(image7, p17);
g.DrawImage(image3, p18);
g.DrawImage(image7, p19);
g.DrawImage(image6, p20);
}
return finalImage;
}
catch (Exception ex)
{
if (finalImage != null)
finalImage.Dispose();
throw ex;
}
finally
{
foreach (System.Drawing.Bitmap image in images)
{
image.Dispose();
}
}
}
private void Form\u加载(对象发送方,事件参数e)
{
Image[]Files=新图像[7];
位图a=新位图(@“C:\icons\icon1.png”);
文件[0]=新位图(a、80、80);
image1=文件[0];
位图b=新位图(@“C:\icons\icon2.png”);
文件[1]=新位图(b,80,80);
image2=文件[1];
位图c=新位图(@“c:\icons\icon3.png”);
文件[2]=新位图(c,80,80);
image3=文件[2];
位图d=新位图(@“C:\icons\icon4.png”);
文件[3]=新位图(d,80,80);
image4=文件[3];
位图h=新位图(@“C:\icons\icon5.png”);
文件[4]=新位图(h,80,80);
image5=文件[4];
位图f=新位图(@“C:\icons\icon6.png”);
文件[5]=新位图(f,80,80);
image6=文件[5];
位图g=新位图(@“C:\icons\icon7.png”);
文件[6]=新位图(g,80,80);
image7=文件[6];
pictureBox1.BackgroundImage=CombineBitmap(文件);
}
公共静态System.Drawing.Bitmap组合位图映射(图像[]文件)
{
列表图像=新列表();
System.Drawing.Bitmap finalImage=null;
尝试
{
整数宽度=0;
整数高度=0;
foreach(文件中的图像)
{
System.Drawing.Bitmap Bitmap=新的System.Drawing.Bitmap(图像);
宽度+=位图宽度;
高度=位图。高度>高度?位图。高度:高度;
添加(位图);
}
finalImage=新系统.绘图.位图(宽度,高度);
使用(System.Drawing.Graphics g=System.Drawing.Graphics.FromImage(最终图像))
{
g、 清除(System.Drawing.Color.Gray);//将其更改为您想要的背景色,也可以将其设置为Color.Transparent
整数偏移=15;
点p1=新点(0,0);
点p2=新点(80,0);
点p3=新点(160,0);
点p4=新点(240,0);
点p5=新点(320,0);
点p6=新点(0,80);
p7点=新点(80,80);
p8点=新点(160,80);
p9点=新点(240,80);
点p10=新点(320,80);
点p11=新点(0,160);
点p12=新点(80160);
点p13=新点(160160);
点p14=新点(240160);
点p15=新点(320160);
点p16=新点(0240);
点p17=新点(80240);
点p18=新点(160240);
点p19=新点(240240);
点p20=新点(320240);
g、 DrawImage(图像1,p1);
g、 DrawImage(图2,p2);
g、 DrawImage(图3,p3);
g、 DrawImage(图4,p4);
g、 DrawImage(图1,p5);
g、 DrawImage(图2,p6);
g、 DrawImage(图4,第7页);
g、 DrawImage(图1,第8页);
g、 DrawImage(图3,第9页);
g、 DrawImage(图3,第10页);
g、 DrawImage(图4,第11页);
g、 DrawImage(图7,第12页);
g、 DrawImage(图2,第13页);
g、 DrawImage(图1,第14页);
g、 DrawImage(图6,第15页);
g、 DrawImage(图3,第16页);
g、 DrawImage(图7,第17页);
g、 DrawImage(图3,第18页);
g、 DrawImage(图7,第19页);
g、 DrawImage(图6,第20页);
}
返回最终授权;
}
捕获(例外情况除外)
{
if(finalImage!=null)
finalImage.Dispose();
掷骰子;
}
最后
{
foreach(图像中的System.Drawing.Bitmap图像)
{
image.Dispose();
}
}
}
您的finalImage
位图太小,只允许一行图像。PictureBox控件然后平铺一行图像,以提供您看到的图像
您正在以宽80像素、高80像素的块绘制图像。因此,位图的宽度应足以容纳80*numColumns
像素,高度应足以容纳80*numRows
像素
由于您有5列4行,请使用以下命令:
finalImage = new System.Drawing.Bitmap(400, 320);
哇,真不敢相信我看得太多了。谢谢,太快了!有时我们看不见森林,看不见树木:)