c# - System::Drawing::Bitmap to unsigned char * -
i have c# .net library grabs frames camera. need send frames native application takes images unsigned char*.
i take frames system::drawing::bitmap.
so far can retrieve byte[] bitmap. test done image of resolution 400*234, should getting 400*234*3 bytes 24bpp rgb image requires.
however, i'm getting byte[] of size 11948.
this how convert bitmap byte[]:
private static byte[] imagetobyte(bitmap img) { imageconverter converter = new imageconverter(); return (byte[])converter.convertto(img, typeof(byte[])); } what proper way convert system::drawing::bitmap rgb unsigned char*?
this has done using lockbits method, here code example:
rectangle rect = new rectangle(0, 0, m_bitmap.width, m_bitmap.height); bitmapdata bmpdata = m_bitmap.lockbits(rect, imagelockmode.readonly, m_bitmap.pixelformat); intptr ptr = bmpdata.scan0; int bytes = math.abs(bmpdata.stride) * m_bitmap.height; byte[] rgbvalues = new byte[bytes]; marshal.copy(ptr, rgbvalues, 0, bytes); m_bitmap.unlockbits(bmpdata); gchandle handle = gchandle::alloc(rgbvalues, gchandletype::pinned); unsigned char * data = (unsigned char*) (void*) handle.addrofpinnedobject(); //do whatever data
Comments
Post a Comment