Direct2d绘制图片的问题

网上看了不少资料,其中某篇是用笔刷画的。这样做仅适用于图片可以一次贴完的情况下。

若想要贴图片的一部分 必须要用到rendertarget的 drawbimap方法。而不是用笔刷来画。

如下的函数比较符合人类适用习惯

void Draw(const D2D1_RECT_F& rcDest, const D2D1_RECT_F& rcSrc)  
{  
    //计算缩放值  
 
    //使用了默认参数,使用整张图片  
    D2D1_RECT_F rf= rcSrc;  
    if (rf.right - rf.left == 0)  
    {  
        D2D1_SIZE_F sf = m_pBitmap->GetSize();  
        if (sf.width == 0 || sf.height == 0)  
            return ;  
  
        rf.right = sf.width;  
        rf.bottom = sf.height;  
    }  
  
    /*float dstWidth = rcDest.right - rcDest.left;  
    float srcWidth = rf.right - rf.left;  
  
    float dstHeight = rcDest.bottom - rcDest.top;  
    float srcHeight = rf.bottom - rf.top;  
  
    float scaleX = dstWidth / srcWidth;  
    float scaleY = dstHeight / srcHeight;  
  
    // Translate for the bitmap brush.  
    D2D1::Matrix3x2F final,trans,scale;  
    trans= D2D1::Matrix3x2F::Translation(D2D1::SizeF(rcDest.left, rcDest.top));  
    scale=D2D1::Matrix3x2F::Scale(scaleX,scaleY);  
    final =  scale*trans;  
  
    m_pRenderTarget->SetTransform(final);*/  
      
    m_pRenderTarget->DrawBitmap(m_pBitmap, rcDest, 1,D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR, rf);  
  
    // Demonstrate a bitmap brush.  
    //m_pRenderTarget->FillRectangle(&rf, m_pBitmapBrush);  
  
    //恢复transform  
    m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());  
}  

其中注释掉的部分是原来的实现。用在这里算是笔刷来绘制的备份吧。如果图片并不可以重复使用的话(比如用来铺地板),那么还是每次都drawbitmap比较好。

图片画刷,只是微软表明,有这个功能罢了。当然,他可以通过辐射,或者其他东西来实现很特殊的效果。这就需要摸索了。

正常情况下,用于界面的贴图,2d地图的绘制,都使用drawbitmap比较好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值