使用iplRotate我得到的图片正在丢失左右部分。为什么?

时间:2017-08-15 09:28:53

标签: canvas bitmap c++builder ipl

代码为两个创建CreateImageHeader:imageSo和imageDe, 然后通过扫描线对imagedata进行估值, 然后通过判断角度旋转, 然后通过imagedata评估scanline,

我将主要代码显示为我所说的背后,希望有人能给我建议或思考。

创建:

imageSo = CreateImageHeader(bmp->PixelFormat, bmp->Width,bmp->Height);  
imageDe = CreateImageHeader(bmp->PixelFormat, bmp->Width,bmp->Height);  
转移:

bit1=(BYTE*) bmp->ScanLine[hSrc-1];  
bit2=imageSo->imageData;  
for(int i=0;i < hSrc;i++)    
{  
    memcpy(bit2,bit1,cpy);  
    bit1+=wBmp;  
    bit2+=wIpl;  
}  

旋转:

if(param.Angle){  

double xshift=0;  

double yshift=0;  

iiplGetRotateShift(bmp->Width/2,bmp->Height/2,BmpProperty.Angle,&xshift,&yshift);    

iiplRotate(imageSo,imageDe,BmpProperty.Angle,xshift,yshift,IPL_INTER_CUBIC|IPL_SMOOTH_EDGE);  
}  

shift2:

bit1=(BYTE*) bmp->ScanLine[hSrc-1];  
bit2=imageSo->imageData;  
for(int i=0;i < hSrc;i++)   
{  
    memcpy(bit1,bit2,cpy);  
    bit1+=wBmp;  
    bit2+=wIpl;  
}   

1 个答案:

答案 0 :(得分:0)

我现在知道原因,因为在旋转之后,画布也在旋转,所以我将画布设置为一个前面是矩形的正方形。另外理解画布中的图片位置也会有所帮助。

这里是介绍画布旋转细节的网站。 enter link description here