2009-04-13 132 views
19

是否可以从存储器(byte[]streamBitmap)中加载图片而不将其保存到磁盘?如何从位图中将图像置于图片框中

这是我使用打开byte[]阵列为Bitmap代码:

unsafe 
{ 
    fixed (byte* ptr = Misc.ConvertFromUInt32Array(image)) 
    { 
     Bitmap bmp = new Bitmap(200, 64, 800, PixelFormat.Format32bppRgb, new IntPtr(ptr)); 
     bmp.RotateFlip(RotateFlipType.Rotate180FlipX); 
     bmp.MakeTransparent(Color.Black); 
     bmp.Save("test.bmp"); 
    } 
} 

而不是使用Bmp.save()的,我可以把Bitmap在图片框中我的形式?

回答

41

你试过吗?

pictureBox.Image = bmp; 
+0

我只是做了它和它的工作很好,谢谢! – 2009-04-13 10:51:36

0

如果您正在使用C++编程语言的工作,这是可以做到这样的:

void backGroundImage() 
{ 
    Image^ back = gcnew Bitmap("C:\\Users\\User\\Documents\\image.bmp"); 
    pictureBox1->BackGroundImage = back; 
}; 

然后就可以调用backGroundImage当你需要加载一个位图。

3

我有一些类似于导致内存泄漏的接受答案的代码。问题在于,当您将图片框图像设置为位图时,您仍然指向位图,而不是创建副本。如果您需要多次设置图像,则需要确保处理所有旧位图。

这是给任何想要的人克隆位图到图像框。试试这个:

if (pictureBox.Image != null) pictureBox.Image.Dispose(); 
pictureBox.Image = myBitmap.Clone(
    new Rectangle(0, 0, myBitmap.Width, myBitmap.Height), 
    System.Drawing.Imaging.PixelFormat.DontCare); 
+1

谢谢。试图使用位图而不克隆它是在System.Drawing.Dll中引发异常。使用.Clone建议为我解决了这个问题! – saurabhj 2016-03-29 06:54:00

-1
pictureBox.Image = Properties.Resources.image.bmp; 
+0

你能否提供一些关于如何工作的更多细节? – jotik 2017-07-31 00:19:27

相关问题