Используйте 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 ответ
Решение
Теперь я знаю причину, потому что после поворота холст также вращался, поэтому я установил холст в виде квадрата, который был прямоугольником до этого. Также понимаю, что изображение в положении холста также поможет.
Вот сайт, который представляет детали холста поворота. введите описание ссылки здесь