简单绘图类

简单绘图类

文章来源: http://www.codeproject.com/KB/graphics/cpicture.aspx

代码下载: http://www.codeproject.com/KB/graphics/cpicture/CPicture_Demo.zip

         http://www.codeproject.com/KB/graphics/cpicture/CPicture_src.zip

本文介绍了一个简单的类,能将大部分类型的图片绘制到屏幕上。

此外,该类还可以将图片存为资源。通过使用GetResource函数,可以很容易的将波形文件或文档模板存储到应用程序中。本文所举的例子将三种类型的影像存储在内存中:1号图片是JPEG格式,2号图片是GIF格式,3号图片是位图。

通过这个例子你将会学习到如何使用该类。下面将展示最为核心的一些代码。

下面的例子同样用到了Keith RuleCmemDC类来增强绘图功能。

// The function 'LoadFromBuffer' prepares the IPicture class.
   
   
// It requires a buffer filled with the contents of an image.
   
   

  
  
   
    
  
  
bool CPicture::LoadFromBuffer(BYTE* pBuff, int nSize)
   
   
{
   
   
    bool bResult = false;
   
   

  
  
   
    
  
  
    HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, nSize);
   
   
    void* pData = GlobalLock(hGlobal);
   
   
    memcpy(pData, pBuff, nSize);
   
   
    GlobalUnlock(hGlobal);
   
   

  
  
   
    
  
  
    IStream* pStream = NULL;
   
   

  
  
   
    
  
  
    if (CreateStreamOnHGlobal(hGlobal, TRUE, &pStream) == S_OK)
   
   
    {
   
   
        HRESULT hr;
   
   
        if ((hr = OleLoadPicture(pStream, nSize, FALSE, IID_IPicture,
   
   
                                 (LPVOID *)&m_pPicture)) == S_OK)
   
   
            bResult = true;
   
   

  
  
   
    
  
  
        pStream->Release();
   
   
    }
   
   

  
  
   
    
  
  
    return bResult;
   
   
}
   
   
 
   
   
// This function draws the picture on the device context
   
   

  
  
   
    
  
  
bool CPicture::Draw(CDC* pDC, int x, int y, int cx, int cy)
   
   
{
   
   
    long hmWidth;
   
   
    long hmHeight;
   
   
    m_pPicture->get_Width(&hmWidth);
   
   
    m_pPicture->get_Height(&hmHeight);
   
   

  
  
   
    
  
  
    if (m_pPicture->Render(pDC->m_hDC, x, y, cx, cy, 0, 
   
   
                              hmHeight, hmWidth, -hmHeight, NULL) == S_OK)
   
   
        return true;
   
   

  
  
   
    
  
  
    return false;
   
   
}
   
   

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值