int CCameraView::SavePicture(BYTE *buf)
{
BITMAPFILEHEADER fileHeader; /* bmp file header */
BITMAPINFOHEADER infoHeader; /* bmp information header */
RGBQUAD rgb[256]; /* palette */
CFile bmpFile;
int i;
if (bmpFile.Open("test.bmp", CFile::modeCreate | CFile::modeReadWrite) == 0) {
return -1;
}
fileHeader.bfType = 0x4d42;
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
256 * sizeof(RGBQUAD);
fileHeader.bfSize = fileHeader.bfOffBits + IMAGE_WIDTH * IMAGE_HEIGHT;
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0;
infoHeader.biSize = sizeof(BITMAPINFOHEADER);
infoHeader.biWidth = IMAGE_WIDTH;
infoHeader.biHeight = IMAGE_HEIGHT;
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 8;
infoHeader.biCompression = BI_RGB;
infoHeader.biSizeImage = 0;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
for (i = 0; i < 256; i++) {
rgb[i].rgbRed = i;
rgb[i].rgbGreen = i;
rgb[i].rgbBlue = i;
rgb[i].rgbReserved = 0;
}
bmpFile.Write(&fileHeader, sizeof(BITMAPFILEHEADER)); /* 写入位图文件头 */
bmpFile.Write(&infoHeader, sizeof(BITMAPINFOHEADER)); /* 写入位图信息头 */
bmpFile.Write(rgb, 256 * sizeof(RGBQUAD)); /* 写入调色板 */
bmpFile.Write(buf, IMAGE_WIDTH * IMAGE_HEIGHT); /* 写入图像数据 */
bmpFile.Close();
return 0;
}
{
BITMAPFILEHEADER fileHeader; /* bmp file header */
BITMAPINFOHEADER infoHeader; /* bmp information header */
RGBQUAD rgb[256]; /* palette */
CFile bmpFile;
int i;
if (bmpFile.Open("test.bmp", CFile::modeCreate | CFile::modeReadWrite) == 0) {
return -1;
}
fileHeader.bfType = 0x4d42;
fileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) +
256 * sizeof(RGBQUAD);
fileHeader.bfSize = fileHeader.bfOffBits + IMAGE_WIDTH * IMAGE_HEIGHT;
fileHeader.bfReserved1 = 0;
fileHeader.bfReserved2 = 0;
infoHeader.biSize = sizeof(BITMAPINFOHEADER);
infoHeader.biWidth = IMAGE_WIDTH;
infoHeader.biHeight = IMAGE_HEIGHT;
infoHeader.biPlanes = 1;
infoHeader.biBitCount = 8;
infoHeader.biCompression = BI_RGB;
infoHeader.biSizeImage = 0;
infoHeader.biXPelsPerMeter = 0;
infoHeader.biYPelsPerMeter = 0;
infoHeader.biClrUsed = 0;
infoHeader.biClrImportant = 0;
for (i = 0; i < 256; i++) {
rgb[i].rgbRed = i;
rgb[i].rgbGreen = i;
rgb[i].rgbBlue = i;
rgb[i].rgbReserved = 0;
}
bmpFile.Write(&fileHeader, sizeof(BITMAPFILEHEADER)); /* 写入位图文件头 */
bmpFile.Write(&infoHeader, sizeof(BITMAPINFOHEADER)); /* 写入位图信息头 */
bmpFile.Write(rgb, 256 * sizeof(RGBQUAD)); /* 写入调色板 */
bmpFile.Write(buf, IMAGE_WIDTH * IMAGE_HEIGHT); /* 写入图像数据 */
bmpFile.Close();
return 0;
}
该函数用于存储Y信号数据到bmp文件中,其中buf为8位Y信号数据。