学习DIB技术
直接对内存读写
一个例子:
http://www.21code.com/codebase/?pos=down&id=1754

解决方案 »

  1.   

    你这个问题的具体解决方法把图像转为数组:
    用CreateDIBSection创建一24位色DIB
    创建一hDC,并把刚才创建DIB选入
    把图像BitBlt到那个hDC
    建立一数组
    分配好大小(与DIB位图所占字节一致)
    CopyMemory 数组(0),ByVal DIB的地址, DIB位图所占字节
    把数组转为图像:
    用CreateDIBSection创建一24位色DIB
    创建一hDC,并把刚才创建DIB选入
    CopyMemory ByVal DIB的地址,数组(0), DIB位图所占字节
    再BitBlt画出图像
      

  2.   

    谢谢 zyl910(910:分儿,我来了!) 。问题解决了。非常感谢。一点补充:DIB到数组使用GetDIBits
      

  3.   

    虽然GetDIBits是最正规的方法
    但用CopyMemory最快
      

  4.   

    但用copymemory的源目标地址是什么?
      

  5.   

    CreateDIBSection VB声明 
    Declare Function CreateDIBSection Lib "gdi32" Alias "CreateDIBSection" (ByVal hDC As Long, pBitmapInfo As BITMAPINFO, ByVal un As Long, ByVal lplpVoid As Long, ByVal handle As Long, ByVal dw As Long) As Long 
    说明 
    创建一个DIBSection。这是一个GDI对象,可象一幅与设备有关位图那样使用。但是,它在内部作为一幅与设备无关位图保存 
    返回值 
    Long,执行成功返回DIBSection位图的句柄,零表示失败。会设置GetLastError 
    参数表 
    参数 类型及说明 
    hDC Long,一个设备场景的句柄。如dw设为DIB_PAL_COLORS,那么DIB颜色表就会用来自逻辑调色板的颜色进行初始化 
    pBitmapInfo BITMAPINFO,这个结构初始化成欲创建的那幅位图的配置数据 
    un Long,下述常数之一: 
    DIB_PAL_COLORS BITMAPINFO包含了一个16位调色板索引的数组 
    DIB_RGB_COLORS BITMAPINFO包含了一个颜色表,其中保存有32位颜色(RGBQUAD) 
    lplpVoid Long,用于载入DIBSection数据区的内存地址 
    handle Long,指向一个文件映射对象的可选句柄,位图将在其中创建。如设为零,Windows会自动分配内存 
    dw Long,如指定了句柄,就用这个参数指定位图数据在文件映射对象中的偏移量 
    注解 
    一旦不再需要,记住用DeleteObject函数删除DIBSection位图
    如Windows分配了一个内存缓冲区,那么对象删除以后,缓冲区也会自动删除。如指定了一个文件映射对象,则不会自动将其清除
    在直接访问DIB内存之前,首先必须保证Windows已完成了绘图(记住,Windows可能对绘图操作进行了排列处理)。通过调用gdiFlush函数,可确保完成所有未决的绘图操作