旋转图片的效率很低,各位大侠看看有什么可以优化的方法吗?
旋转图片中有如下代码,但是这段代码的效率好低,如果位图大一点的,旋转90度的话,至少要好几秒,不知道有什么方法可以提高旋转图片的效率呢?
for(int x = 0; x < DestBitmapWidth; x++)
{
for(int y = 0; y < DestBitmapHeight; y++)
{
int SrcBitmapx = (int)((x + minx) * cosine + (y + miny) * sine);
int SrcBitmapy = (int)((y + miny) * cosine - (x + minx) * sine);
if(SrcBitmapx >= 0 && SrcBitmapx < pSource->Width
&& SrcBitmapy >= 0 && SrcBitmapy < pSource->Height)
{
pNewPic->Canvas->Pixels[x][y] = pSource->Canvas->Pixels[SrcBitmapx][SrcBitmapy];
}
}
}
[解决办法]
用gdi+, RotateFlip() 函数直接就能实现旋转功能
[解决办法]
大致如此,具体你google下吧
Gdiplus::Graphics g(Canvas->Handle);
TBitmap* bmp = new TBitmap("c:\\121212.bmp");
bmp->RotateFlip(RotateFlipType::Rotate90FlipNone);
g.DrawImage(bmp, 4, 4, bmp->GetWidth, bmp->GetHeight);
...
// 旋转角度RotateFlipType是个枚举,有如下值
RotateNoneFlipNone = 0;
Rotate90FlipNone = 1;
Rotate180FlipNone = 2;
Rotate270FlipNone = 3;
RotateNoneFlipX = 4;
Rotate90FlipX = 5;
Rotate180FlipX = 6;
Rotate270FlipX = 7;
[解决办法]
Pixels在太慢了,用ScanLine试试
[解决办法]
晕。。逐点或逐行都太慢了,直接上API:BitBlt()
[解决办法]
ijl、opencv图片处理效率比较高。