C#在picturebox上绘图,而不是持久性的
我有一个列表对象“imagelist”,它包含许多图像的路径,比如.png。现在,使用以下代码:C#在picturebox上绘图,而不是持久性的,c#,bitmap,paint,picturebox,C#,Bitmap,Paint,Picturebox,我有一个列表对象“imagelist”,它包含许多图像的路径,比如.png。现在,使用以下代码: private void paint_picture(PictureBox picture, string pathofpic) { Graphics g = picture.CreateGraphics(); Bitmap drawnpic = null; if (imagelist.ContainsKey(picture.Name))
private void paint_picture(PictureBox picture, string pathofpic)
{
Graphics g = picture.CreateGraphics();
Bitmap drawnpic = null;
if (imagelist.ContainsKey(picture.Name))
{
drawnpic = new Bitmap(pathofpic);
g.DrawImage(drawnpic, 0, 0, picture.Size.Width, picture.Size.Height);
imagelist[picture.Name] = pathofpic;
}
drawnpic.Dispose();
g.Dispose();
}
每次更改卡片的图像时,我都会调用此选项,但当我将图片框拖到表单上(例如,拖到其他图片框上)时,我似乎无法使图像保留在图片框上。点击和拖动代码只是用鼠标移动picturebox,并不真正相关
我尝试在取消选择图像时使表单无效,但它没有任何作用
有什么我遗漏的吗?在下面的屏幕截图中,我在表单周围拖动了一个图像,它覆盖了移动的其他图像:
这就是绘画的工作原理–你必须处理它的
Paint
事件,并在每次需要重新绘画时保持绘制相同的东西
您可以在原始图像上绘制:
Bitmap b = new Bitmap(picture.Image);
using (Graphics g = Graphics.FromImage(b)) {
using (Bitmap drawnpic = new Bitmap(pathofpic)) {
g.DrawImage(drawnpic, 0, 0, b.Width, b.Height);
}
}
picture.Image = b;
然后将原始图像保存到某个位置,并可能使用它来代替新建位图
行中的picture.image
方法名称请参见
PascalCase
。) 这就是绘画的工作原理–你必须处理它的Paint
事件,并在每次需要重新绘画时继续绘制相同的东西
您可以在原始图像上绘制:
Bitmap b = new Bitmap(picture.Image);
using (Graphics g = Graphics.FromImage(b)) {
using (Bitmap drawnpic = new Bitmap(pathofpic)) {
g.DrawImage(drawnpic, 0, 0, b.Width, b.Height);
}
}
picture.Image = b;
然后将原始图像保存到某个位置,并可能使用它来代替新建位图
行中的picture.image
方法名称请参见
PascalCase
。) 这就是绘画的工作原理–你必须处理它的Paint
事件,并在每次需要重新绘画时继续绘制相同的东西
您可以在原始图像上绘制:
Bitmap b = new Bitmap(picture.Image);
using (Graphics g = Graphics.FromImage(b)) {
using (Bitmap drawnpic = new Bitmap(pathofpic)) {
g.DrawImage(drawnpic, 0, 0, b.Width, b.Height);
}
}
picture.Image = b;
然后将原始图像保存到某个位置,并可能使用它来代替新建位图
行中的picture.image
方法名称请参见
PascalCase
。) 这就是绘画的工作原理–你必须处理它的Paint
事件,并在每次需要重新绘画时继续绘制相同的东西
您可以在原始图像上绘制:
Bitmap b = new Bitmap(picture.Image);
using (Graphics g = Graphics.FromImage(b)) {
using (Bitmap drawnpic = new Bitmap(pathofpic)) {
g.DrawImage(drawnpic, 0, 0, b.Width, b.Height);
}
}
picture.Image = b;
然后将原始图像保存到某个位置,并可能使用它来代替新建位图
行中的picture.image
方法名称请参见
PascalCase
。) 我不能使用picturebox的image或backgroundimage属性,因为它占用了太多内存-我需要将一个图像绘制到一个空的picturebox,并以某种方式使其保持持久性。这不可能吗?@Codefun64:不,不可能。你必须把它放在某个地方。另外,你的图片是否比图片框大很多?有一点,但这不是我担心内存使用的原因。我正在创建数千个picturebox,我需要一种方法来显示其中的图像(可能是所有唯一的图像,与我原来的问题中显示的图像不同),并使它们保持不变。我无法使用picturebox的图像或背景图像属性,因为它占用了太多的内存——我需要在一个空的picturebox中绘制一个图像,并让它以某种方式保持持久性。这不可能吗?@Codefun64:不,不可能。你必须把它放在某个地方。另外,你的图片是否比图片框大很多?有一点,但这不是我担心内存使用的原因。我正在创建数千个picturebox,我需要一种方法来显示其中的图像(可能是所有唯一的图像,与我原来的问题中显示的图像不同),并使它们保持不变。我无法使用picturebox的图像或背景图像属性,因为它占用了太多的内存——我需要在一个空的picturebox中绘制一个图像,并让它以某种方式保持持久性。这不可能吗?@Codefun64:不,不可能。你必须把它放在某个地方。另外,你的图片是否比图片框大很多?有一点,但这不是我担心内存使用的原因。我正在创建数千个picturebox,我需要一种方法来显示其中的图像(可能是所有唯一的图像,与我原来的问题中显示的图像不同),并使它们保持不变。我无法使用picturebox的图像或背景图像属性,因为它占用了太多的内存——我需要在一个空的picturebox中绘制一个图像,并让它以某种方式保持持久性。这不可能吗?@Codefun64:不,不可能。你必须把它放在某个地方。另外,你的图片是否比图片框大很多?有一点,但这不是我担心内存使用的原因。我正在创建数千个PictureBox,我需要一种方法来显示其中的图像(可能是所有独特的图像,与我最初的问题中显示的图像不同),并使它们保持持久性。