会员: 密码:  免费注册 | 忘记密码 | 会员登录 网页功能: 加入收藏 设为首页 网站搜索  
游戏开发 > 程序设计 > 图形处理
一种实现色彩格式转化得简便方法
发表日期:2007-01-18 16:52:49作者: 出处:  


    要从一个图象文件中读取数据并显示,最困难得莫过于色彩格式得转化了。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对齐的。
 
    用以上方法实现的色彩格式转化虽说不是最好的解决方法,但不失为一种有效的方法。也许自己写会比用以上方法更高效,但把大量时间花在这些“非主题编程”上值得吗?因此,有时使用一些已有的程序也是一种编程的好思路,这也符合软件工程中提倡的“软件复用技术”。
 
返回顶部】 【打印本页】 【关闭窗口

关于我们 / 给我留言 / 版权举报 / 意见建议 / 网站编程QQ群   
Copyright ©2003- 2024 Lihuasoft.net webmaster(at)lihuasoft.net 加载时间 0.00293