今天我收到了一些要审核的代码。 由于代码将在无头电脑上工作,因此代码将每个帧保存为单独的RGBa图像。 在我的Ubuntu安装上,我无法查看这些图片,GIMP抱怨标题丢失。 Imagemagick选项转换或显示也没有显示任何图像。
这是生成图像的代码片段:
if (act.doScreenshot || (act.doVideo && buddhabrot_animate.animating))
{
uchar4* tmpBuffer = new uchar4[env.static_env.save.imageW
* env.static_env.save.imageH];
for (int i = 0; i < env.static_env.save.imageW * env.static_env.save.imageH; i++)
{
const unsigned char tmp = tmpBuffer[i].x;
tmpBuffer[i].x = tmpBuffer[i].z;
tmpBuffer[i].z = tmp;
}
char filename[128];
FILE* fp = fopen(filename, "w+b");
BITMAPFILEHEADER bmpFH;
BITMAPINFOHEADER bmpIH;
memset(&bmpFH, 0, sizeof(bmpFH));
memset(&bmpIH, 0, sizeof(bmpIH));
bmpFH.bfType = 19778; //"BM"
bmpFH.bfSize = sizeof(bmpFH) + sizeof(bmpIH) + env.static_env.save.imageW * env.static_env.save.imageH;
bmpFH.bfOffBits = sizeof(bmpFH) + sizeof(bmpIH);
bmpIH.biSize = sizeof(bmpIH);
bmpIH.biWidth = env.static_env.save.imageW;
bmpIH.biHeight = env.static_env.save.imageH;
bmpIH.biPlanes = 1;
bmpIH.biBitCount = 32;
fwrite(&bmpFH, 1, sizeof(bmpFH), fp);
fwrite(&bmpIH, 1, sizeof(bmpIH), fp);
fwrite
(tmpBuffer,
env.static_env.save.imageW * env.static_env.save.imageH,
sizeof(uchar4),
fp);
fclose(fp);
delete[] tmpBuffer;
有没有办法看图像? 或者可能是另一种将图像保存为JPG的方法?
答案 0 :(得分:0)
您无法正确计算bmpFH.bfSize
,您需要将图像中的像素数乘以像素的大小(4)。例如:
bmpFH.bfSize = sizeof(bmpFH) + sizeof(bmpIH) + env.static_env.save.imageW * env.static_env.save.imageH * sizeof(uchar4);
您还应将bmpIH.biCompression
初始化为BI_RGB
。它无论如何都会起作用,因为它的值恰好为零,但明确表示它是好的。您也可能想要否定您分配给bmpIH.biHeight
的值,因为正高度值表示自下而上的图像。