Hello,
Could some kind C++/C# expert out there translate the GetBitmap function found in the COM API source into C#? The C++ source for the COM API does not compile (error C2661: 'RR_API::getImage' : no overloaded function takes 5 arguments) and the C# API source doesn't include the GetBitmap function at all.
I've tried for several hours to do the translation myself or to fix the COM source without success. Note that the RR_COM_API.dll file that comes with the main RR distribution does not seem to include the GetBitmap function.
The reason I need the GetBitmap function is I that want to display real-time RoboRealm images in a picture box in my C# form. Thanks to an earlier post, I can save a RR image to a jpeg disk file, then read it back in as a Bitmap, but I can only do this once since the file is then reported as being in use by the RoboRealm process. I realize I could use the web server interface to RR to display the image, but I am also using an image processing library that needs the images in Bitmap format.
So in short, it would be great to have a working GetBitmap function in the C# or COM API. :-)
Hoping someone can help!
Thanks,
patrick
|
|
Hi Patrick,
Try the following routine, You will also have to delcare using System.Runtime.InteropServices; in order to get it to work
// Create RGB24 bitmap from Byte array
Bitmap BitsToBitmapRGB24(Byte[] bytes, int width, int height)
{
//swap RGB to BGR
Byte tmp;
for (int x = 3; x < bytes.GetLength(0); x += 3)
{
tmp = bytes[(x + 2)];
bytes[x + 2] = bytes[x];
bytes[x] = tmp;
}
if (bytes.GetLength(0) < width * height * 3)
{
return null;
}
Bitmap bmp = new Bitmap(width, height, PixelFormat.Format24bppRgb);
int i;
BitmapData data = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.WriteOnly, bmp.PixelFormat);
if (data.Stride == width * 3)
{
Marshal.Copy(bytes, 0, data.Scan0, width * height * 3);
}
else
{
for (i = 0; i < bmp.Height; i++)
{
IntPtr p = new IntPtr(data.Scan0.ToInt32() + data.Stride * i);
Marshal.Copy(bytes, i * bmp.Width * 3, p, bmp.Width * 3);
}
}
bmp.UnlockBits(data);
return bmp;
}
|
|