2011-09-15 21 views
1

我在變換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結果原始奇怪是不是肯定的正確one.Any想法?

+1

還有額外的字節(填充)可以將圖像的每一行與4倍數的地址對齊。您是否看到結果圖像傾斜? – Shahbaz

回答

3

您的代碼不適用於位圖行對齊。請參閱IplImage :: widthStep成員。如果widthStep不等於(以像素爲單位的像素大小*以像素爲單位的線寬),則無法在一次memcpy調用中複製整個圖像。

Windows位圖是32位對齊的,這就是爲什麼512x512圖像正常,而426x425是錯誤的。例如,如果圖像寬度= 11,並且每個像素長度爲1個字節,則實際行寬(widthStep)將爲12(4個字節對齊)。

+0

是的,它不僅僅是32位對齊的Windows位圖。如果你在OpenGL中設置紋理,它也是32位對齊的,還有更多的例子。您應該始終完全瞭解您加載/保存的圖像的格式。 – Shahbaz