C代码:
char *BitResource = BitInBitmap();   
BITMAPFILEHEADER* pBitHeader = (BITMAPFILEHEADER*) BitResource;
int BitSize = pBitHeader->bfSize;           
file.open("D:\\Bit.bmp");                
file.write(BitResource, BitSize); 
file.close();---------------------------------------------------------
function BitInBitmap() : pchar  //这个是动态库函数
-------------------------------------------------------var
pBitHeader : ^BITMAPFILEHEADER;
cBitInBit : pchar;
begin
cBitInBit := BitInBitmap();
pBitHeader := @(cBitInBit^); 获取到pBitHeader以后如何存为文件?后面该怎么写.请帮忙.

解决方案 »

  1.   

    procedure TForm1.FormCreate(Sender: TObject);
    var
    fileheader:tbitmapfileheader; //位图的文件头
    infoheader:tbitmapinfoheader; //位图的信息头
    stream:tfilestream;//文件流对象
    localbmp:tbitmap; //位图对象
    linelen:integer;  //每一行像素长度
    clipleft,cliptop,clipwidth,clipheight,bytecount:integer;
    i:integer;
    //j:integer; //位图倒立显示,变量
    begin
    form1.Width:=screen.Width;
    form1.Height:=screen.Height;
    form1.Top:=0;
    form1.Left:=0;
    self.DoubleBuffered:=true; //建立双缓冲
    cliptop:=0;
    clipwidth:=image1.Width;
    clipheight:=image1.Height;
    //将位图加载到文件流中
    stream:=tfilestream.Create('2.bmp',fmopenread or fmsharedenywrite);
    localbmp:=tbitmap.Create;//创建位图实例
    stream.Read(fileheader,sizeof(tbitmapfileheader));//读取文件头数据
    stream.Read(infoheader,sizeof(tbitmapinfoheader));//读取信息头数据
    localbmp.Width:=clipwidth;
    localbmp.Height:=clipheight;
    localbmp.PixelFormat:=pf24bit;//设置为24位位图
    bytecount:=3;
    clipleft:=0;
    //j:=clipheight-1;//位图倒立显示,变量
    linelen:=(bytecount*infoheader.biWidth+3) shr 2 shl 2;
    for i:=cliptop to cliptop + clipheight -1 do
    begin
    //设置新的指针位置
    stream.Position :=integer(fileheader.bfOffBits) + linelen * (infoheader.biHeight-1-i) + bytecount * clipleft;
    //stream.Read(localbmp.scanline[j-i]^,clipwidth * bytecount); //位图倒立显示
    //将新的数据读进文件流中
    stream.Read(localbmp.scanline[i-cliptop]^,clipwidth * bytecount);//位图正常显示
    end;
    image1.Picture.Bitmap.Assign(localbmp);
    end;end.
    c不懂,看看这段d的代码,能不能有参考作用!
      

  2.   

    建一个Bitmap类,把图片信息保存到一个数据流中
    用Bitmap.loadfromstream读进bitmap中,然后bitmap.savetofile
      

  3.   


    var 
      pBitHeader : ^BITMAPFILEHEADER; 
      cBitInBit : pchar; 
      bitSize : integer; 
      aFile:TFileStream;
    begin 
      cBitInBit := BitInBitmap(); 
      pBitHeader := @(cBitInBit^); 
      bitSize := pBitHeader.bfSize 
      aFile:=TFileStream.Create('D:\aBmp.bmp');
      aFile.Write(pBitHeader,BitSize);
      //  或aFile.Write(pBitHeader^,BitSize);
      //  楼主可分别试验一下这两条哪个能够成功
      aFile.free;
      

  4.   

    关于2楼和7楼的意见:
    BitInBitmap()返回的本身就是Bitmap图片的数据流,所以没有必要再“建一个Bitmap类,Bitmap.loadFromStream,再Bitmap.SaveToFile”,直接将函数返回结果作为数据流存储到磁盘文件即可。
      

  5.   


    //*****************************************
    //函数: SaveHBmpToStream
    //作者: 不得闲
    //功能:通过Bitmap句柄保存为二进制流数据
    //*****************************************
    procedure SaveHBmpToStream(const bmpHandle: HBITMAP;Stream: TStream);
    var
      ds: TDIBSection;
      BmpFileHeader:  TBitmapFileHeader;
      NumberOfColors,BitCount: Integer;
      Bm: tagBITMAP;
      Bytes: integer;
    begin
      if Stream = nil then
        raise Exception.Create('Stream无效');
      Stream.Size := 0;
      Bytes := GetObject(bmpHandle,SizeOf(ds),@ds); //获得有关DIBSECTION结构中的点阵图资讯
      if Bytes = 0 then
        raise Exception.Create('无效的位图文件');
      Bytes := GetObject(bmpHandle,SizeOf(bm),@Bm);//获得tagBITMAP结构
      if Bytes = 0 then
        raise Exception.Create('无效的位图文件');
      NumberOfColors := ds.dsBmih.biClrUsed;//获得调色板中实际使用的颜色数
      BitCount := ds.dsBmih.biBitCount;//位图位数
      if (NumberOfColors = 0) and (BitCount <= 8) then
         NumberOfColors := 1 shl BitCount;
      With BmpFileHeader do
      begin
        bfType := $4D42;  // 'BM'位图标记
        bfReserved1 := 0;
        bfReserved2 := 0;
        bfOffBits := SizeOf(TBitmapFileHeader)       +
                     SizeOf(TBitmapInfoHeader)       +
                     NumberOfColors*SizeOf(TRGBQuad); //获得信息头大小
        bfSize := bfOffBits + ds.dsBmih.biSizeImage; //获得文件大小
      end;
      Stream.Write(BmpFileHeader,sizeof(BITMAPFILEHEADER));
      Stream.Write(ds.dsBmih,sizeof(TBITMAPINFOHEADER));
      stream.Write(Bm.bmBits^, ds.dsBmih.biSizeImage);
      Stream.Seek(0,soFromBeginning);
    end;
      

  6.   

     File.Write(pBitHeader^,BitSize);已解决