我看了很多关于位图的资料,位图有 信息头结构,颜色表(有或无),象素阵列。
我想自己创建一个内存中的位图,位图上的象素点颜色都手动计算,用真彩色模式,也就是 存储RGB值,那么我写的时候,创建完了位图的头部信息,并分配好了内存空间,我接下来该怎么写呢? 写的格式是什么?   请不要用这样的方法: 在内存中创建 屏幕关联描述表 ,然后用绘图函数的绘图在位图上绘图的方法,因为信息处理量很大很复杂的时候,这样的效果并不好,并且速度很慢。

解决方案 »

  1.   

    假如你使用的格式是从上向下扫描的。例如一般的格式。 BMP 是从下向上扫描的。设 BYTE* bmpdata 指向位图图形数据的首地址。设大小为 w * h 像素,每个像素占用三个字节(RGB 顺序). 
    则: 位图 X 范围 0 ~ w-1, Y: 0 ~ h-1.
     
    SetPixel(x,y, r, g ,b) 
    {    bmpdata[w * 3 * y + x * 3 ] = r;
         bmpdata[w * 3 * y + x * 3 + 1 ] = g;   
         bmpdata[w * 3 * y + x * 3 + 2 ] = b;
    }
      

  2.   

    具体,象素的存储格式,我也知道的。
    TO  chzy00(逸少) 
    设 BYTE* bmpdata 指向位图图形数据的首地址
    我就是想知道的是怎么得到这个首地址。
    那么举个例子吧!我要得到 一个内存中绘制的已经建立好的位图的第一个象素点值,然后再修改这个值。首先生命以下:GetPixel()和SetPixel()的效率很低的,我一次要处理的数据可能是一个屏幕1024*768,如果再使用多向缓冲,就跟可怕了,很容易就死机了!得到 一个内存中绘制的已经建立好的位图的第一个象素点值,然后再修改这个值!
      

  3.   

    http://asp.6to23.com/iseesoft/devdoc/imgdoc/bmp_fileformat.htm
      

  4.   

    有一个这样的函数:
    CreateDIBSection(HDC,CONST BITMAPINFO *,UINT,VOID **,HANDL,DWORD);
    其中的参数VOID **,是就是二维数组(width height)的信息写进了位图里面?
      

  5.   

    你的意思,是不是想脱离CDC?自己绘图? 直接在内存里面创建?这样做速度的确会很快。位图的结构还是比较简单,如果你处理24位位图,那就更好了。24bit的,不用处理调色板。要注意的地方是,位图的存储有字对奇,每一行所占用的长度必须是字的整数倍,
    如果不够,就需要补齐。小心处理 BITMAPINFO 这个结构,把它写到文件,然后再写你的位图。其实还挺容易的。============================================================================
    提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
    http://alphasun.betajin.com/                            给我发信息请附带原帖地址
    http://www.betajin.com/alphasun/index.htm
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  6.   

    我现在有了大概的眉目,还在尝试,如果我今天中午12点前,没有揭贴,就表示在下没有做出来,那么摆脱各位哥哥姐姐叔叔阿姨帮忙,写一个 真彩色格式(16位 不用条色版的)位图 存储的格式,我要很精确的,例如:象素阵列 的第一个象素的指针如何去获得,象素的颜色格式(555格式)。先谢过了!对了,DIB位图的显示方法是否和DDB一样呢?