I am working with a framegrabber and need to get the images from computer memory and save them on an image file. after trying for couple of days I end up with the following 2 fu
FORMAT_INFO sFormat;
mvfg_getparam( MVFGPAR_DATAFORMAT, &sFormat, giCurrentGrabberID);
long lFrameSize = sFormat.lFrameSize;
BYTE *pBitmap = (BYTE*)malloc(FrameSize);
memcpy( pBitmap, CamGetPicture(), FrameSize );
writeBitmapToFile(pBitmap, FrameSize, "tmp.bmp");
/*
* write our raw data into a bitmap file
* adding the correct header and put it all
* together in a single file
*/
int
writeBitmapToFile(void *data, unsigned long size, const char *filename)
{
bmpFileHeader_t header;
bmpInfoHeader_t info;
bmpRGBQuad_t rgb = { 0, 0, 0, 0};
FILE *out;
size_t len;
int i;
header.type = 0x4d42; // magic sequence 'BM'
header.size = 0;
header.res0 = 0;
header.res1 = 0;
/* 256 different colors, each is defined by an bmpRBQuad type */
header.offset = 256 * sizeof(bmpRGBQuad_t) +
sizeof(bmpInfoHeader_t) + sizeof(bmpFileHeader_t);
info.size = sizeof(bmpInfoHeader_t);
info.width = WIDTH;
info.height = HEIGHT;
info.planes = 1;
info.cDepth = 8; /* 8 Bit */
info.compression = 0;
info.rawSize = size;
info.hRes = 0;
info.vRes = 0;
info.nrColors = 0x100;
info.impColors = 0;
out = fopen(filename, "wb");
if (out == NULL) {
printf("error cannot open %s for writing\n", filename);
return -1;
}
len = fwrite(&header, 1, sizeof(header), out);
if (len != sizeof(header)) {
printf("error while writing header\n");
return -1;
}
len = fwrite(&info, 1, sizeof(info), out);
if (len != sizeof(info)) {
printf("error while writing info header\n");
return -1;
}
/* stupid try and error programming leads to this */
for (i = 0; i < 256; i++) {
rgb.red = i;
rgb.green = i;
rgb.blue = i;
len = fwrite(&rgb, 1, sizeof(rgb), out);
if (len != sizeof(rgb)) {
printf("error while writing rgb header\n");
return -1;
}
}
len = fwrite(data, 1, size, out);
if (len != size ) {
printf("error while writing bitmap data\n");
return -1;
}
return 0;
}
Reference - mikrotron
Reference - write bitmap