看帮助好象使用StretchDIBits函数,开始要定义一个HDC:Panel.Handle用来显示图象,
但是关于位图结构参数:CONST BITMAPINFO *lpBitsInfo 我不知道怎么搞。

解决方案 »

  1.   

    msdn中有dbi(bmp)文件的结构的详细介绍,delphi中ms SDK帮助中也有。
      

  2.   

    To:ibear(大熊) 
       我看了,但是不太明白其中的几个定义,象“CONST BITMAPINFO *lpBitsInfo ”是C中的一个结构,不知道在DELPHI中怎么定义这个结构。
      

  3.   

    用API
    int SetDIBitsToDevice(
      HDC hdc,              // handle to device context
      int XDest,            // x-coordinate of upper-left corner of 
                            // dest. rect.
      int YDest,            // y-coordinate of upper-left corner of 
                            // dest. rect.
      DWORD dwWidth,        // source rectangle width
      DWORD dwHeight,       // source rectangle height
      int XSrc,             // x-coordinate of lower-left corner of 
                            // source rect.
      int YSrc,             // y-coordinate of lower-left corner of 
                            // source rect.
      UINT uStartScan,      // first scan line in array
      UINT cScanLines,      // number of scan lines
      CONST VOID *lpvBits,  // address of array with DIB bits
      CONST BITMAPINFO *lpbmi,  // address of structure with bitmap info.
      UINT fuColorUse       // RGB or palette indexes
    );
    hdc: 可为 .canvas.handle;uStartScan : 一般为零;
    cScanLines: 实际上就是图象的高度;
    lpvBits:指向图象数据的指针;
    Bitmapinfo:就是位图头了
    fuColorUse : 一般为DIB_RGB_COLORS
    看看MSDN
      

  4.   

    To: pathe(睡斛) 
       我就是最后几个参数如:CONST BITMAPINFO *lpbmi,  // address of structure with bitmap info
    不知道怎么设置啊。
      

  5.   

    tagBITMAPINFO = packed record
        bmiHeader: TBitmapInfoHeader;
        bmiColors: array[0..0] of TRGBQuad;
      end;
      tagBITMAPINFOHEADER = packed record
        biSize: DWORD;
        biWidth: Longint;
        biHeight: Longint;
        biPlanes: Word;
        biBitCount: Word;
        biCompression: DWORD;
        biSizeImage: DWORD;
        biXPelsPerMeter: Longint;
        biYPelsPerMeter: Longint;
        biClrUsed: DWORD;
        biClrImportant: DWORD;
      end;
      TBitmapInfoHeader = tagBITMAPINFOHEADER;
    哦,你在查查bmp文件的结构,就明白了!
      

  6.   

    要想显示这个数据,你起码要知道以下几点:这个图象数据是什么格式的?
    是压缩的,还是bmp这样没压缩的?如果压缩的是用什么方式压缩的?是jpg?还是。?
    颜色是多少位的?8bit?16bit?32bit?还是就黑白两色?
    如果是8bit的,其中还要有RGB表!
    图象的高和宽在哪个字节?如果不清楚就没发下手,可以自己分析比较,也可以自己试试几种发生!
      

  7.   


        DWORD  biSize; 该结构大小(bytes)
        LONG   biWidth; 图象宽
        LONG   biHeight; 图象高
        WORD   biPlanes; 必须为1
        WORD   biBitCount用多少位来表示一个点(0, 1, 4,8,16,24,32) 
        DWORD  biCompression;有没有压缩,一般为BI_RGB无压缩 
        DWORD  biSizeImage; 图象大小(bytes)
        LONG   biXPelsPerMeter; x resolution
        LONG   biYPelsPerMeter; y resolution
        DWORD  biClrUsed; 用了多少颜色数(指调色板图象)
        DWORD  biClrImportant; 需要多少颜色数
        如果是24,或32位的,后两个可设为0。
      

  8.   

    pathe(睡斛):
      看样子你不是真正了解电脑是这样处理图象的,你给的那些定义只是结构定义,
    而不是他现在这个数据的定义,你要他如何好使用?只有他清楚了自己的数据,
    才能用这个定义格式来显示图象!(有了你定义的资料,只要是有效的图数据,任何数据我都能显示,可惜,他自己都不清楚数据现在的格式,也就是说他
    还不清楚这些8000H的数据那些地方与你定义的格式相匹配!!!!比如,第几个字节是图象的宽?那几个是图象的高????)
      

  9.   

    我解决了,没有使用API函数,那个API的细节麻烦了点,看帮助看的很辛苦,很多东西都不知道什么意思,我直接用image1.canvas.pixels[j,i]将图像画出来(首先将数据放到一个矩阵中,然后一个点一个点的画),虽然效率不高,但图象还是比较清晰的。
        To:pathe(睡斛) 
            你列出的结构我都知道,但是主要是不知道代表什么意思。
        To:chinakiss8848(似乎明白了) 
            我那4000H数据全是图像数据,不包括头文件,我也是昨天才从硬件部知道有头文件,可惜我都画完了。
        谢谢各位帮忙了。