zoukankan      html  css  js  c++  java
  • 【原创】分享一组VC++底层图像处理函数

    刚刚整理了以前的一些代码,因为时间有限,暂时将一组处理DIB Section(HBITMAP句柄)的函数集源码共享。

    本代码为2001年首次编写,其中部分代码为从网络收集。这些处理函数在多年的VC图形项目中一直使用,安全,高效。

    作用:  该DLL完成了关于BMP图象的转化,存储,透明等多方面操作。
       该函数集合主要围绕DIB Section句柄(HBTIMAP)在WINDOWS系统中绘制,透明,旋转,输出等功能而建立。
       方便用户对于底层BITMAP图形最直接得控制,从而提高程序运行效率。
       可用于例如追求显示效率的WINDOW窗口图形控制等项目。

    代码集形式为.DLL模式,即标准的WINDOWS动态链接库。采用VC6平台开发并编译通过。

    相关功能函数如下:

    1 // .DLL APPLICATION
    2  // ManagerBmp.h
    3  ////////////////////////////////////////////////////////////////////////////////////
    4  // 名称: managerBmp(DLL)头文件
    5  // 作者: DarkPrince
    6  // 作用: 该DLL完成了关于BMP图象的转化,存储,透明等多方面操作
    7 // 该函数集合主要围绕DIB Section句柄(HBTIMAP)在WINDOWS系统中绘制,
    8 // 透明,旋转,输出等功能而建立。
    9 // 方便用户对于底层BITMAP图形最直接得控制,从而提高程序运行效率。
    10 // 可用于例如追求显示效率的WINDOW窗口图形控制等项目。
    11 //
    12 // 备注: 该DLL中函数部分代码为网络中寻找,部分为自己编写
    13 // 对于网络中引用的部分代码由于已经无法确认出处,所以请相关作者基于理解
    14 // 首次开发: 2001.7.20
    15 ////////////////////////////////////////////////////////////////////////////////////
    16 #ifdef MANAGERBMP_EXPORTS
    17 #define MANAGERBMP_API __declspec(dllexport)
    18 #else
    19 #define MANAGERBMP_API __declspec(dllimport)
    20 #endif
    21 //调用方式
    22 enum
    23 {
    24 LOADBMP_FROM_SYS,//调用系统函数
    25 LOADBMP_FROM_FILE//调用自定义函数,FROM FILE
    26 };
    27
    28 //透明方式
    29 enum
    30 {
    31 AUXIMG_TRANSTYPE_SRC,//透明源图中透明色
    32 AUXIMG_TRANSTYPE_DST//透明目的图中透明色
    33 };
    34
    35 //in: 图片路径,BMP句柄,PAL句柄,调用方式
    36 //out: TRUE/FALSE
    37 //功能: 按照指定路径取得DIBSECTION和调色板
    38 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
    39 // 调用该函数后要用DELETEOBJECT()释放HBITMAP,HPALETTE对象
    40 MANAGERBMP_API BOOL LoadDIBSectAndPalette(LPCSTR szBmpPath, HBITMAP& hBmp,
    41 HPALETTE* pPal=NULL, BYTE byType=LOADBMP_FROM_SYS);
    42
    43 //in: 图片路径,BMP句柄
    44 //out: TRUE/FALSE
    45 //功能: 按照指定路径取得DIBSECTION,FROM SYS FUNC
    46 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
    47 // 调用该函数后要用DELETEOBJECT()释放HBITMAP
    48 MANAGERBMP_API BOOL LoadDIBSectBySys(LPCSTR szBmpPath,HBITMAP& hBmp);
    49
    50 //in: 图片路径,BMP句柄
    51 //out: TRUE/FALSE
    52 //功能: 按照指定路径取得DIBSECTION,FROM SELF FUNC
    53 //注意: 这里我们会取得取得HBITMAP句柄,这里是DIBSECTION而非DIB OR DDB
    54 // 调用该函数后要用DELETEOBJECT()释放HBITMAP
    55 MANAGERBMP_API BOOL LoadDIBSectByFile(LPCSTR szBmpPath,HBITMAP& hBmp);
    56
    57 //in: 目标图片句柄,目标图起始点X,Y,目标图宽度,高度,源图句柄,源图起始点X,Y,透明度
    58 //out: TRUE/FALSE
    59 //功能: 对两张24位真彩色进行ALPHA透明,The ALPHA param must IN range of 0-----255
    60 //注意: 这里的两个图象句柄只针对24位DIBSECTION
    61 // 如果ALPHA参数为255那么为COPY图象到定点
    62 MANAGERBMP_API BOOL AlphaBltDIBSect24(HBITMAP hBmpDst,int dx,int dy, int boxW,int boxH,
    63 HBITMAP hBmpSrc,int sx,int sy,BYTE alpha);
    64
    65 //in: 目标图片句柄,目标图起始点X,Y,目标图宽度,高度,源图句柄,源图起始点X,Y,透明色,透明方式
    66 //out: TRUE/FALSE
    67 //功能: 对两张24位真彩色指定颜色透明
    68 //注意: 这里的两个图象句柄只针对24位DIBSECTION,其他DDB,DIB格式都不支持
    69 // 透明方式为点透明
    70 MANAGERBMP_API BOOL TransBltDIBSect24(HBITMAP hBmpDst,int dx,int dy, int boxW,int boxH,
    71 HBITMAP hBmpSrc,int sx,int sy,COLORREF clrTrans,
    72 int nTransType=AUXIMG_TRANSTYPE_SRC);
    73
    74 //in: 目标图象句柄(DIBSECTION),源图片句柄
    75 //out: TRUE/FALSE
    76 //注意: 两张图片一定要大小相等并且颜色深度相同
    77 //功能: 复制DIB SECT到另一个DIB SECT句柄中
    78 MANAGERBMP_API BOOL CopyDIBSectBlt(HBITMAP hBmpDst,HBITMAP hBmpSrc);
    79
    80 //in: 源图片DDB句柄,PAL句柄(如果为NULL,那么调用系统默认的PAL),压缩参数
    81 //out: 返回DIB HANDLE
    82 //功能: 将DDB转换成DIB SECT
    83 //注意: 返回后的HANDLE需要使用GLOBALFREE()函数释放掉
    84 MANAGERBMP_API HANDLE DIBSectToDIBWithPalette(HBITMAP hBitmap, HPALETTE hPal=NULL,
    85 DWORD dwCompression=BI_RGB);
    86
    87 //in: DIB HANDLE
    88 //out: DDB HBITMAP
    89 //功能: 将DIB SECT转化成DDB
    90 //注意: 返回后的HBITMAP需要使用DELETEOBJECT()函数释放
    91 MANAGERBMP_API HBITMAP DIBToDIBSect(HANDLE hdib);
    92
    93 //in: DIBSECTION HBTIMAP
    94 //out: DIB HANDLE
    95 //功能: 将DIBSECTION 转化成DIB HANDLE
    96 //注意: 这里返回的DIB HANDLE需要使用GLOBFREEF()函数释放
    97 MANAGERBMP_API HANDLE DIBSectToDIB(HBITMAP hBitmap);
    98
    99 //in: 路径,DDB HBITMAP,HPAL,压缩比率
    100 //out: TRUE/FALSE
    101 //功能: 将DDB图象存储成BMP图片
    102 MANAGERBMP_API BOOL SaveDIBSectToFileWithPalette(LPCSTR szBmpPath,HBITMAP& hBmp,
    103 HPALETTE hPal=NULL,DWORD dwCompression=BI_RGB);
    104
    105 //in: 路径,DIB HANDLE
    106 //out: TRUE/FALSE
    107 //功能: 将DIB图象存储成BMP图片
    108 MANAGERBMP_API BOOL SaveDIBToFile(LPCSTR szBmpPath,HANDLE hDib);
    109
    110 //in: 路径,DIBSECTION HBITMAP
    111 //out: TRUE/FALSE
    112 //功能: 将DIBsection图象存储成BMP图片
    113 MANAGERBMP_API BOOL SaveDIBSectToFile(LPCSTR szBmpPath,HBITMAP hBmp);
    114
    115 //in: 图象句柄(DDB,DIBSECTION),图象SIZE结构
    116 //out: TRUE/FALSE
    117 //功能: 取得一个指定图象(DDB OR DIBSECTION)的大小
    118 MANAGERBMP_API BOOL GetBmpSize(HBITMAP hBmp,SIZE& sizeBmp);
    119
    120 //in: 图象句柄(DDB,DIBSECTION),透明色开始位置,透明色结束位置
    121 //out: TRUE/FALSE
    122 //功能: 根据BMP图象创建一个异型区域
    123 MANAGERBMP_API HRGN BmpToRgn(HBITMAP hbmp, COLORREF cTransparentColor=0,
    124 COLORREF cTolerance=0);
    125
    126 //in: 目的DC,目的开始点X,Y,需要目的的宽度,高度,源DC,源开始点X,Y,透明色
    127 //out: TRUE/FALSE
    128 //功能: 将两个DC中BMP进行指定透明色的透明
    129 //注意: hSrcDC必须是已经将源图象选入的DC,该透明方式为MASK TRANS
    130 MANAGERBMP_API BOOL TransBltBmp(HDC hDstDC,int dx,int dy,int boxW,int boxH,
    131 HDC hSrcDC,int sx,int sy,COLORREF clrTrans);
    132
    133 //in: 目的DC,目的开始点X,Y,需要目的的宽度,高度,源图象(DDB OR DIBSECTION),
    134 // 源开始点X,Y,透明色
    135 //out: TRUE/FALSE
    136 //功能: 将图象句柄透明到目的DC中,指定颜色透明
    137 //注意: hSrcDC必须是已经将源图象选入的DC, 该透明方式为MASK TRANS
    138 MANAGERBMP_API BOOL TransBltBmp(HDC hDstDC,int dx,int dy,int boxW,int boxH,
    139 HBITMAP hSrcBmp,int sx,int sy,COLORREF clrTrans);
    140
    141 //in: 目的图象(DDB OR DIBSECTION),目的开始点X,Y,需要目的的宽度,高度,
    142 // 源图象(DDB OR DIBSECTION),源开始点X,Y,透明色
    143 //out: TRUE/FALSE
    144 //功能: 将图象句柄透明到目的DC中,指定颜色透明
    145 //注意: 两张图片不能是DIB的,该透明方式为MASK TRANS
    146 MANAGERBMP_API BOOL TransBltBmp(HBITMAP hDstBmp,int dx,int dy,int boxW,int boxH,
    147 HBITMAP hSrcBmp,int sx,int sy,COLORREF clrTrans);
    148
    149 //in: 源图像句柄,旋转角度,旋转后空白区域颜色
    150 //out: 旋转后新图像句柄
    151 //功能: 旋转原图到指定角度,返回旋转后新图,旋转后空白区域用指定颜色填充
    152 MANAGERBMP_API HBITMAP GetRotatedBitmap(HBITMAP hBitmap,float radians, COLORREF clrBack);
    153
    154 //in: 图片宽度,图片高度
    155 //out: 创建新图
    156 //功能: 创建指定宽度,高度BMP图片
    157 MANAGERBMP_API HBITMAP CreateBlankBmp(int biWidth,int biHeight);

    该动态库源代码及简单调用示例 [下载]

  • 相关阅读:
    Windows 命令行
    建议博客园提供 BT 资源发布功能——由分享 VS2005 Beta2 的历程想到的
    成功 自信 快乐(转载)
    轻松一下,加菲猫语录
    COmega 概述
    对 RBAC 几种模型的理解及初步实现构想
    DHTML 中滚动条的设置
    求婚
    终于有了自己的blog!
    VS2005 已发布!
  • 原文地址:https://www.cnblogs.com/darkprince/p/2044890.html
Copyright © 2011-2022 走看看