GDI+ 的图片缩放, 一点纠正.

   用" GDI+ 图片缩放" 或者类似的关键字, 谷歌之, 看见的都是类似的结果. 可惜这些几乎一样的文章都有点小问题.

 

以下是摘录:

--------------------------------------------

方法二 , 使用 Graphics::DrawImage, 这样还可以控制 IntERP olationMode( 插值模式 , 在缩放和旋转时候使用 ), 即可以控制缩放质量高低 . 也可以通过 Graphics 对象做其他的控制 .

方法也比较简单 , 但是却费了我好久时间才研究出来 , 没办法 , 不熟悉 GDI+, MSDN 中翻来翻去 ,:)

Bitmap * ScaleBitmap(Bitmap * PB itmap,UINT nWidth,UINT nHeight)

{

Bitmap * pTemp = new Bitmap(nWidth,nHeight,pBitmap->GetPixelFormat());

if( pTemp )

{

Graphics * g = Graphics::FromImage(pTemp);

if( g )

{

// use the best interpolation mode

g->SetInterpolationMode(InterpolationModeHighQualityBicubic);

g->DrawImage(pBitmap,0,0,nWidth,nHeight);

delete g;

}

}

return pTemp;

}

pScaledImage = ScaleBitmap(image,nWidth,nHeight);

 

---------------------------

 

不知道这文章的原作者是谁, 但这样写是有瑕疵的, 试过就知道这样做实际效果是裁切一部分图像 , 不是缩放 !

 

其实只要做点小小改动就可以了:

        //  自己添加一个缩放框, DrawImage需要这参数

        Rect destRect(0, 0, nWidth, nHeight);

        //  这里设定缩放的模式为高质量
        g->SetInterpolationMode(InterpolationModeHighQualityBicubic);

        //  这个重载函数才是缩放, 注意参数比上面裁切代码参数有不同.
        g->DrawImage(&image,
                            destRect,
                            0,
                            0,
                            nWidth,
                            nHeight,
                            UnitPixel);

 

其实这都是GDI+ SDK中就说明了的, 可能有人把示例中裁切代码错当成了缩放, 两者是有点相似. 大部分GDI+的用法和示例都可以在SDK参考上找到, 只是最好动手试下.

 

另附:

GDI+ SDK参考(翻译版本) 由 sTeVes   提供, 无需资源分下载

http://download.csdn.net/source/260557

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值