WM中使用IImage做部分绘图的问题

近日在使用iimage组件绘制图片时发现组件接口可能分别处理了PNG图形的24位位深和平32位位深的图。

代码片断:

// strFileName是外部文件路径,ppimageiimage指针的指针

m_pImgFactory->CreateImageFromFile((const WCHAR*)strFileName.c_str(), ppImage))

 

ImageInfo imageInfo;

(void)pImage->GetImageInfo(&imageInfo);

//根据每英寸的点数来计算每毫米的点数

double dDotPermmX = imageInfo.Xdpi/25.4;

double dDotPermmY = imageInfo.Ydpi/25.4;

//pSrcRect指向以像素点为单位的区域

//计算已知图形的.01数毫米数

RECT rcTemp = {(LONG)((rcSrc->left/dDotPermmX)/0.01),

                (LONG)((rcSrc->top/dDotPermmY)/0.01),

                (LONG)((rcSrc->right/dDotPermmX)/0.01),

                (LONG)((rcSrc->bottom/dDotPermmY)/0.01)};  

 

//这里rcDst表示将要画上的区域,这个区域和目标DC有关,rcTemp是源图形的区域信息。

HRESULT hr = pImage->Draw(hdc, rcDst, &rcTemp);

 

上述代码使用IImage组件加载一张图,并显示。问题在于当rcTemp不为空时,即试图从Iimage切出部分图形显示在目标DC的区域上时。PNG图形的24位和32位切出的部位不一样。32位的切出是正序的,即(0,0)位在源图的左上角,而24位切出的是倒序的,(0,0)在源图的左下角。可能因为24位是逆序的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值