IImage的一些用法

因为美工做出来的图是PNG24,带alpha通道透明的图片,用传统的BITBLT方法没有办法显示(可能是本人比较笨啦,哈哈),所以采用了IIMAGE的方法来进行画图。

 

使用IIMAGE的DRAW的方法时,要画局部图片是发现总是不对,查了一下MSDN,发现是如下的问题。

OPTIONAL const RECT* srcRect[in] An optional pointer to a RECT that specifies, in 0.01mm units, the portion of the image to be drawn in dstRect. To display the entire image, set this value to NULL.

它是采用0.01mm的单位来画的,所以要进行转换。

// 得到图片信息
 ImageInfo imageInfo;
 pImage->GetImageInfo( &imageInfo );

 

double dDotPermmX = imageInfo.Xdpi / 25.4;
  double dDotPermmY = imageInfo.Ydpi / 25.4;

  RECT rcSrc = { ( LONG )( rectSrc->left/dDotPermmX/0.01 ),
   ( LONG )( rectSrc->top/dDotPermmY/0.01 ),
   ( LONG )( rectSrc->right/dDotPermmX/0.01 ),
   ( LONG )( rectSrc->bottom/dDotPermmY/0.01 ) };

  // rcSrc in 0.01mm units
  pImage->Draw( hdc, &rectDstTemp, &rcSrc );//HDC hdc为绘制目标句柄

 

 

对于大图片,使用SHLOADIMAGEFILE是无法得到HBITMAP的,但是用DRAW经常刷屏又会比较慢,此时可以采用一下两种方法:

1.得到缩略图IImage->GetThumbnail

2.在初始化的时候把IImage贴在一块内存HDC上,在wm_paint的时候直接把这块HDC往屏幕HDC贴就可以了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值