不使用Tbitmap.savetostream(TStream);
自己实现

解决方案 »

  1.   

    我的意思是
    typedef struct tagBITMAP {  // bm  
       LONG   bmType; 
       LONG   bmWidth; 
       LONG   bmHeight; 
       LONG   bmWidthBytes; 
       WORD   bmPlanes; 
       WORD   bmBitsPixel; 
       LPVOID bmBits; 
    } BITMAP; 
    怎么从Tbitmap中获得以上数据的地址后直接访问bmbits等值
      

  2.   

    自己实现?我刚看了一个TBitmap的源码procedure TBitmap.WriteStream(Stream: TStream; WriteSize: Boolean);
    const
      PalSize: array [Boolean] of Byte = (sizeof(TRGBQuad), sizeof(TRGBTriple));
    var
      Size, ColorCount: DWORD;
      HeaderSize: DWORD;
      BMF: TBitmapFileHeader;
      Save: THandle;
      BC: TBitmapCoreHeader;
      Colors: array [Byte] of TRGBQuad;
    begin
      if FImage.FSaveStream <> nil then
      begin
        Size := FImage.FSaveStream.Size;
        if WriteSize then
          Stream.WriteBuffer(Size, sizeof(Size));// 数据占内存大小
          Stream.Write(FImage.FSaveStream.Memory^, Size);//数据
        Exit;
      end;
     ..........
     ........... end;你把它修改一下,返回你要的 LPVOID bmBits 不就行了?
      

  3.   

    下面是.BMP文件的格式,也许看了对你有帮助
    http://www.csdn.net/dev/Format/graphics/Bmp.html