依赖设备的位图和 dib 之间转换

发布时间:2020-03-17 发布网站:大佬教程
大佬教程收集整理的这篇文章主要介绍了依赖设备的位图和 dib 之间转换大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

若要将一个 DDB 转换为 DIB 使用以下步骤:

  1. 初始化 BITMAPINFOHEADER 数据结构。
    1. 设置为 sizeof(BITMAPINFOHEADER) biSize。
    2. 将 biWidth 设置为位图的宽度。
    3. 将 biHeight 设置为位图的高度。
    4. 将 biPlanes 设置为 1。
    5. 设置为乘以 bmBitsPixel 的位图 bmPlanes biBitCount。此值可以包含仅在值 1、 4、 8,或 24。
    6. 将 biCompression 设置为所需的格式 (通常 BI_RGB)。
    7. 可以将所有其他字段设置为零。
    初始化 BITMAPINFOHEADER 数据结构的代码可能如下所示:
       BITMAPINFOHEADER bmi;
    BITMAP bm;
    .
    .
    .
    bmi.biSize = sizeof(BITMAPINFOHEADER);
    bmi.biWidth = bm.bmWidth;
    bmi.biHeight = bm.bmHeight;
    bmi.biPlanes = 1;
    bmi.biBitCount = bm.bmPlanes * bm.bmBitsPixel;

    if (bmi.biBitCount <= 1)
    bmi.biBitCount = 1;
    else if (bmi.biBitCount <= 4)
    bmi.biBitCount = 4;
    else if (bmi.biBitCount <= 8)
    bmi.biBitCount = 8;
    else
    bmi.biBitCount = 24;

    bmi.biCompression = BI_RGB;
    bmi.biSizeImage = 0;
    bmi.biXPelsPerMeter = 0;
    bmi.biYPelsPerMeter = 0;
    bmi.biClrUsed = 0;
    bmi.biClrImportant = 0;
  2. 如果逻辑调色板与位图关联到所需的设备上下文使用 SelectObject() ,选择调色板,然后实现与 RealizePalette() 调色板。
  3. 分配一个内存块的大小足以存储该 DIB BITMAPINFOHEADER 结构和颜色表。颜色表是一个包含图像所使用的颜色的 RGBQUAD 结构数组。颜色表的大小是乘以 sizeof(RGBQUAD) 的颜色数。使用 biBitCount 字段 BITMAPINFOHEADER,指定颜色分辨率 (每个像素的位) 中找到的颜色数。例如对于每个像素 1 位意味着单色 (两色) 每像素 4 位表示 16 色和每像素 8 位表示 256 色。为一个 24 位颜色图像但是,没有颜色表。
  4. 调用 GetDIBits() 函数与所需的设备上下文 (DC) 作为 lpBitsInfo,将内存块的指针,并作为 lpBits 参数为 NULL。这样将指示设备驱动程序以填充 biSizeImage BITMAPINFOHEADER 结构 (该字段应该都已初始化为 0,第 1 步中) 的字段中。biSizeImage 字段指定 (以字节为单位) 存储组成该 DIB 的图像位所需的内存量。如果此字段后调用 GetDIBits() 仍然 0,应用程序必须计算 biSizeImage 使用以下公式:
    ((((biWidth * biBitCount) + 31) & ~31) >> 3) * biHeight
    此公式是必需的因为图像的每个扫描线对齐在双字节边界上。
  5. 重新分配内存块包含提供更多的内存来存储该 DIB 的位 BITMAPINFOHEADER 和颜色表。
  6. 作为 lpBits,位图位和作为 DIB_RGB_COLORS wUsage 调用 GetDIBits() 与所需的 DC,作为 lpBitsInfo 将内存块的指针,指向缓冲区的指针。这将存储与 BITMAPINFOHEADER 结构 DIB 的位,并完成颜色表。

在上面的 SHOWDIB DIB.C 文件中 DibFromBitmap() 函数、 BitmapToDIB() 函数的 WINCAP,DIBUTIL.C 文件中和 BitmapToDIB() 函数在 DIB.C 中的列出的示例应用程序中的 DIBVIEW 文件说明上述过程。

: 的前两个示例将位图转换为 Windows 3.0 样式 dib 和不支持 OS/2 类型 dib。DIBVIEW 支持 OS/2 类型 dib。

有关 Windows 3.0 样式 DIB 格式的详细信息,请参阅"microsoft Windows 软件开发工具包参考卷 2"版本 3.0 手动和 $ Windows 3.1 SDK 中"程序员参考卷 3 中的 BITMAPINFOBITMAPINFOHEADERRGBQUAD 结构的文档: 邮件、 结构,和宏的"手动。

若要将 DIB 转换为一个 DDB,请执行下列操作:

  1. 创建逻辑调色板与 DIB 颜色表中的信息。完成使用的颜色值颜色表中找到,则调用 CreatePalette() LOGPALETTE 数据结构。
  2. 选择逻辑调色板到所需的设备上下文使用 SelectObject() ,然后实现使用 RealizePalette() 调色板。
  3. 调用 CreateDIBitmap() 使用所需的 DC 和指向该 DIB 指针作为 lpInfoHeader 参数。此函数返回一个 DDB 句柄。

在上面的 SHOWDIB DIB.C 文件中 BitmapFromDib() 函数、 DIBToBitmap() 函数的 WINCAP,DIBUTIL.C 文件中和 DIBToBitmap() 函数在 DIB.C 中的列出的示例应用程序中的 DIBVIEW 文件说明上述过程。

大佬总结

以上是大佬教程为你收集整理的依赖设备的位图和 dib 之间转换全部内容,希望文章能够帮你解决依赖设备的位图和 dib 之间转换所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ群:277859234,请注明来意。