首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

旋转图片的效率很低,诸位大侠看看有什么可以优化的方法吗

2013-04-20 
旋转图片的效率很低,各位大侠看看有什么可以优化的方法吗?旋转图片中有如下代码,但是这段代码的效率好低,

旋转图片的效率很低,各位大侠看看有什么可以优化的方法吗?
旋转图片中有如下代码,但是这段代码的效率好低,如果位图大一点的,旋转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图片处理效率比较高。

热点排行