zoukankan      html  css  js  c++  java
  • CreateDIBitmap与CreateDIBSection的区别(转)

    https://www.cnblogs.com/staring-hxs/archive/2013/08/17/3264896.html

    最主要区别

    CreateDIBitmap创建的是设备相关位图句柄 

    CreateDIBSection创建的是设备无关位图句柄

    CreateDIBSection创建的是一个DIBSECTION结构,
    CreateDIBitmap创建的是BITMAP结构。 
     
    1函数原型:
    HBITMAP CreateDIBSection(HDC hdc,CONST BITMAPINFO *pbmi,UINT iUsage,VOID** ppvBits,HANDLE hSection,DWORD dwOffset);
    当hSection为NULL时,系统会使用pbmi指定的位图信息来分配一块内存空间,该内存由操作系统管理,返回类型为HBitMAP的DIBSection对象。当以后通过调用DeleteObject函数删除该DIB时,系统将关闭指向相应内存的句柄。如果Hsection不为NULL,那么在调用DeleteObject删除该位图之后,必须自己关闭hSection内存句柄。
    参数意义:
    hdc:设备环境句柄。如果iUsage的值是DIB_PAL_COLORS,那么函数使用该hdc的逻辑调色板对与设备无关位图的颜色进行初始化。(仅在fColorUse参数设定为DIB_
    PAL_COLORS时,才使用hdc参数,如果fColorUse为DIB_RGB_COLORS(或0),hdc将被忽略
    pbmi:指向BITMAPINFO结构的指针,该结构指定了与设备无关位图的各种属性,其中包括位图的维数和颜色。
    iUsage:指定由pbmi参数指定的BITMAPINFO结构中的成员bmiColors数组包含的数据类型(要么是逻辑调色板索引值,要么是原文的RGB值)。下列值是系统定义的,其含义为:
    DIB_PAL_COLORS:表示成员bmiColors是hdc指定的设备环境的逻辑调色板,使用的是16位索引值数组。
    DIB_RGB_COLORS:表示结构BITMAPINFO中包含了RGB值的数组。
    ppvBits:指向一个变量的指针,该变量接收一个指向DIB位数据值的指针。
    hSectiondwOffset值通常设置为NULL
     
    2函数原型
    int SetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, CONST VOID *lpvBits,CONST BITMAPINFO *lpbmi, UINT fuColorUse);
    该函数使用指定的DIB位图中发现的颜色数据来设置位图中的像素。
    函数将lpvBits中指定的位图图像数据拷贝到hbmp对应系统给分配好的内存中。如果函数成功,那么返回值就是复制的扫描线数;如果函数失败,那么返回值是0。
    参数:
    hdc:指向设备环境中的句柄。
    hbmp:指向位图的句柄。函数要使用指定DIB中的颜色数据对该位图进行更改。(目的地址)
    uStartScan:为参数lpvBits指向的数组中的、与设备无关的颜色数据指定起始扫描线
    cScanLines:为包含与设备无关的颜色数据的数组指定扫描线数目。
    lpvBits:指向DIB颜色数据的指针,这些数据存储在字节类型的数组中,位图值的格式取决于参数lpbmi指向的BITMAPINFO结构中的成员biBitCount。(指定的DIB位图
    lpbmi:指向BITMAPINFO数据结构的指针,该结构包含有关DIB的信息。(指定的DIB位图
    fuColorUse:指定是否提供了BITMAPINFO结构中的bmiColors成员,如果提供了,那么bmiColors是否包含了明确的RGB值或调色板索引。参数fuColorUse必须取下列值,各值的含义为:
    DIB_PAL_COLORS:颜色表由16bit的索引值数组组成。这些值可以对由hdc参数标识的设备环境中的逻辑调色板进行索引。
    DIB_RGB_COLORS:提供了颜色表,并且表中包含了原义的RGB值。
     
    3函数原型
    int GetDIBits(HDC hdc, HBITMAP hbmp, UINT uStartScan, UINT cScanLines, LPVOID lpvBits, LPBITMAPINFO lpbi, UINT uUsage);
    和SetDIBits相反,将数据从位图(hbmp)中取出来放到lpvBits指定的数组中。
  • 相关阅读:
    代码编辑
    作业7
    实验 13 综合练习三
    模版 实验二 概要设计
    在线评测系统(OJ)使用方法
    作业 6 结构体
    结构体简介
    实验 10 指针2
    (第一周)软件工程四人组
    (第一周)读《构建之法》
  • 原文地址:https://www.cnblogs.com/merlinzjl/p/12154474.html
Copyright © 2011-2022 走看看