Используйте iplRotate на картинке, что я получаю, теряя часть левого и правого. Почему?

Код создать CreateImageHeader для двоих:imageSo и imageDe, затем значение imagedata по линии сканирования, затем повернуть по углу оценки, затем значение scanline по imagedata,

Я показываю основной код, как то, что я сказал, позади, надеюсь, что кто-то может дать мне предложение или подумать.

Создайте:

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 ответ

Решение

Теперь я знаю причину, потому что после поворота холст также вращался, поэтому я установил холст в виде квадрата, который был прямоугольником до этого. Также понимаю, что изображение в положении холста также поможет.

Вот сайт, который представляет детали холста поворота. введите описание ссылки здесь

Другие вопросы по тегам