I am trying to dynamically create a Bitmap Image using byte array using following code
Bitmap GetImage()
{
IntPtr ip = Marshal.AllocCoTaskMem(imagesize);
The simplest way may be to create the bitmap (although in similar code I've used a normal byte[]
and then a fixed
block, rather than directly using AllocCoTaskMem
), and then create a second Bitmap
of the same size. Call Graphics.FromImage
on the second bitmap, then Graphics.DrawImage
using the first bitmap to effectively copy the contents of the first bitmap onto the second. You can then call Dispose
on the first bitmap, release the memory, and use the second bitmap which is basically a copy.
There may well be a more efficient way to do it if you're more proficient with image stuff, but if you're just looking for a way to get it to work, it's a starting point :)
EDIT: zachrrs's comment does indeed make things easier using the Bitmap(Image) constructor:
using (Bitmap original = new Bitmap(...))
{
Bitmap copy = new Bitmap(originalImage);
// Then return "copy" from your method, and you can free the
// memory
}
If you know the dimensions in advance, why not creating the bitmap and use the Bitmap.LockBits method to get the input buffer address?