gpt4 book ai didi

c++ - bmp to raw 奇怪的问题

转载 作者:太空宇宙 更新时间:2023-11-03 22:06:56 25 4
gpt4 key购买 nike

我在将一堆 bmp 图像转换为原始文件(无符号字符数组)时遇到一个奇怪的问题。这是代码:

for(int i=365;i<=385;i++)
{
sprintf(secondname,"C:\\tr\\tr_");
sprintf(secondtemp,"_%04d.bmp",i);
strcat(secondname,secondtemp);
cvSaveImage( secondname,out);
cvReleaseImage( &out );
IplImage* img2 = cvLoadImage( secondname,0);
memcpy(&im[xsize*ysize*(i-365)],img2->imageData,xsize*ysize);



}
outfile=fopen("C:\\Histo_Registration\\a.raw","wb");
fwrite((unsigned char*)im,1,(xsize)*(ysize)*(zsize),outfile);
fclose(outfile);

问题是,当我加载的图像是例如 512x512 时,原始结果是好的。当图像是 426x425 时,原始结果是奇怪的,不确定是正确的。有什么想法吗?

最佳答案

您的代码不适用于位图线对齐。请参见 IplImage::widthStep 成员。如果 widthStep 不等于(以字节为单位的像素大小 * 以像素为单位的线宽),则无法在一次 memcpy 调用中复制整个图像。

Windows 位图是 32 位对齐的,这就是为什么 512x512 图像可以,而 426x425 是错误的。例如,如果图像宽度 = 11,并且每个像素的长度为 1 字节,则实际线宽 (widthStep) 将为 12(4 字节对齐)。

关于c++ - bmp to raw 奇怪的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7427980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com