• 设备相关位图(DDB)与设备无关位图(DIB) 的区别


    设备相关位图 DDB(Device-Dependent-Bitmap)

        DDB不具有自己的调色板信息,他的颜色模式必须与输出设备相一致。如:在256色以下的位图中存储的像素值是系统调色板的索引,其颜色依赖于系统调色板。由于DDB高度依赖输出设备,所以DDB只能存在于内存中,它要么在视频内存中,要么在系统内存中。

    设备无关位图DIB(Device-Independent-Bitmap)

        DIB具有自己的调色板信息,他可以不依赖系统的调色板。由于他不依赖于设备,所以通常用它来保存文件,如.bmp格式的文件就是DIB.

    HBITMAP与BITMAP的区别

    BITMAP 是一个结构:  
       
      typedef   struct   tagBITMAP   {     /*   bm   */  
              int           bmType;  
              int           bmWidth;  
              int           bmHeight;  
              int           bmWidthBytes;  
              BYTE         bmPlanes;  
              BYTE         bmBitsPixel;  
              LPVOID     bmBits;  
      }   BITMAP;   

    HBITMAP  是一个指向BITMAP的句柄

      HBITMAP   HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
    "aaa.bmp", IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION|LR_LOADFROMFILE);
      BITMAP   bm;  
      GetObject(hBmp,sizeof(bm),&bm);  可以通过该函数 由HBITMAP取得BITMAP;

    如何通过BITMAP构造一个.bmp格式的文件

            LoadImage从磁盘中读取.bmp文件转换成了易于系统操作的HBITMAP文件,但很多时候又需要将BITMAP数据存储下来,如:存储,D3DXCreateTextureFromFileInMemory()需要严格的.bmp格式的数据才行;

      构建BITMAPFILEHEADER  bfileh; 并填充;构建BITMAPINFOHEADER binfoh并填充;

      将上述两者数据和BITMAP.bmBits的数据拷贝到一个缓冲区即可;

     memcpy( buffer, sizeof(BITMAPFILEHEADER), bfileh);

    memcpy( &buffer[sizeof(BITMAPFILEHEADER)], sizeof(BITMAPINFOHEADER), binfoh);

    memcpy( &buffer[sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER)],  图形数据区字节长度, bitmap.bmBits);

    其他一些DIB,DDB有用的函数:

    GetDIBits();          // 获取HBITMAP的自定数据区,要自己拿个空间去接受这些数据;

    GetBitmapBits();   // 获取HBITMAP中bitmap的指定数据区

    CreateDIBSection();  // 创建一个自定义的位图

  • 相关阅读:
    IDEA-各模块间引用出现问题的解决方法
    【MyBatis学习06】_parameter:解决There is no getter for property named in class java.lang.String
    《转载》JVM垃圾回收机制
    java面试复习题四
    Java中excel转换为jpg/png图片 采用aspose-cells-18.6.jar
    POI导出复杂的excel;excel公共样式类;excel拼接定制类;数据科学计数法转为普通值
    java发送邮件无法显示图片 图裂 的解决办法
    pom.xml文件最详细的讲解
    Tomcat启动报Error listenerStart错误 Context [] startup failed due to previous errors
    ora-01031:insufficient privileges解决方法
  • 原文地址:https://www.cnblogs.com/Jade2009/p/1454263.html
Copyright © 2020-2023  润新知