网页功能: 加入收藏 设为首页 网站搜索  
一种实现色彩格式转化得简便方法
发表日期:2007-01-18作者:[转贴] 出处:  


    要从一个图象文件中读取数据并显示,最困难得莫过于色彩格式得转化了。RGB888、ARGB8888、ARGB4444、RGB565、RGB555、ARGB1555等等。众多的格式要实现快速转化绝非易事。就使用DirectDraw编程来说,其实有一种非常简单的方法,那就是使用StretchDIBits函数。这将大大方便编程,节省出很多时间用于程序的主要功能开发,而不是拘泥于Format。
 
    一下一段短小程序就是利用StretchDIBits函数在DirectDraw7中实现色彩格式的转化,请大家参看注释。
 
    BITMAPINFO BitmapInfo;
    ZeroMemory( &BitmapInfo, sizeof( BitmapInfo ) );
    BitmapInfo.bmiHeader.biSize = sizeof( BitmapInfo.bmiHeader );
    BitmapInfo.bmiHeader.biWidth = lPICWidth;     // 图象宽度
    BitmapInfo.bmiHeader.biHeight = -lPICHeight;  // 图象高度注意为负值
    BitmapInfo.bmiHeader.biPlanes = 1;
    BitmapInfo.bmiHeader.biBitCount = dwPICBits;  // 图象位深

    lpDDS7->GetDC( &hDC );  // 由IDirectDrawSurface7接口获取HDC

    int rc = StretchDIBits( hDC,  // 色彩格式转化
    0,
    0,
    lPICWidth,     // 目标图象宽度
    lPICHeight,    // 目标图象高度注意为正值
    0,
    0,
    lPICWidth,     // 源图象宽度
    lPICHeight,    // 源图象高度注意为正值
    pPixels,       // 源图象缓存
    &BitmapInfo,   // BITMAPINFO结构
    DIB_RGB_COLORS,// 转化为RGB
    SRCCOPY );

    lpDDS7->ReleaseDC( hDC );
    // 有关BITMAPINFO和StretchDIBits函数的具体使用请大家参看Microsoft的有关文档。值得注意的是源图象缓存必须是DWORD对齐的。
 
    用以上方法实现的色彩格式转化虽说不是最好的解决方法,但不失为一种有效的方法。也许自己写会比用以上方法更高效,但把大量时间花在这些“非主题编程”上值得吗?因此,有时使用一些已有的程序也是一种编程的好思路,这也符合软件工程中提倡的“软件复用技术”。
 
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 一种实现色彩格式转化得简便方法
本类热点文章
  DirectShow应用——支持Windows Media格..
  DirectShow PIN 連接教學
  游戏UI设计1
  PSD格式文件的读取
  将RGB值转换为灰度值的简单算法
  貼圖 filtering 與 MIP map 簡介
  读取万能图片以及DShow的另类用法
  TGA图像文件格式资料
  DirectShow初探
  PNG格式
  DirectShow应用——支持DVD播放
  DirectShow的中文资料之建立一个捕捉程序
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.00378