2009-04-13 47 views
19

Có thể tải ảnh từ bộ nhớ (byte[] hoặc stream hoặc Bitmap) mà không lưu ảnh vào đĩa?Cách đặt hình ảnh vào hộp hình từ Bitmap

Đây là mã tôi sử dụng để chuyển các mảng byte[] thành một 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"); 
    } 
} 

Thay vì sử dụng Bmp.save(), tôi có thể đặt Bitmap trong hộp hình ảnh trên mẫu của tôi?

Trả lời

41

Bạn đã thử cái này chưa?

pictureBox.Image = bmp; 
+0

tôi chỉ làm nó và nó làm việc tốt, cảm ơn! –

0

Nếu bạn đang làm việc với ngôn ngữ C++ lập trình, nó có thể được thực hiện như thế này:

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

Sau đó, bạn có thể gọi backGroundImage khi bạn cần phải tải một bitmap.

3

Tôi đã có một số mã giống với câu trả lời được chấp nhận gây ra rò rỉ bộ nhớ. Vấn đề là khi bạn đặt hình ảnh hộp hình ảnh thành bitmap, bạn vẫn đang đề cập đến bitmap, thay vì tạo bản sao. Nếu bạn cần thiết lập hình ảnh nhiều lần, bạn cần phải chắc chắn rằng bạn đang xử lý tất cả các bitmap cũ.

Điều này dành cho bất kỳ ai đang tìm kiếm sao chép một bitmap vào hộp hình ảnh. Hãy thử điều này:

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

Cảm ơn. Cố gắng sử dụng bitmap mà không nhân bản nó đã ném một ngoại lệ trong System.Drawing.Dll. Sử dụng đề xuất .Clone của bạn đã khắc phục sự cố cho tôi! – saurabhj

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

Bạn có thể vui lòng cung cấp thêm một số chi tiết về cách thức hoạt động này không? – jotik

Các vấn đề liên quan