我想把图片以二进制形式存放到任一文件中然后再把它读出来
各位高手救命解决不了我将失业
救救苦难的同胞吧!!!!!!!very thanks

解决方案 »

  1.   

    可以用下面把控件转成strng,从中取图象就是了,我就用的这个苯办法
    function ComponentToString(Component: TComponent): string;
    var
      BinStream:TMemoryStream;
      StrStream: TStringStream;
      s: string;
    begin
      BinStream := TMemoryStream.Create;
      try
        StrStream := TStringStream.Create(s);
        try
          BinStream.WriteComponent(Component);
          BinStream.Seek(0, soFromBeginning);
          ObjectBinaryToText(BinStream, StrStream);
          StrStream.Seek(0, soFromBeginning);
          Result:= StrStream.DataString;
        finally
          StrStream.Free;
        end;
      finally
        BinStream.Free
      end;
    end;
      

  2.   

    先用TBitmap.SaveToStream()保存到一个TMemoryStream对象中,然后使用TMemoryStream.SaveToFile()保存为文件就可以了。应该是,我在外出差,没有环境帮你实际写一个,应该是可以的。
      

  3.   

    那你就定义一个文件结构。例如前100个字节存放文本信息。第101开始存放二进制。使用TMemoryStream对象的Seek对象来定位,再写入数据不就可以了吗?
      

  4.   

    我刚写了这么一个
    function BmpToString(pic:tpicture):string;
    var
      i:integer;
      ms:TMemoryStream;
      Buffer:char;
    begin
      result:='';
      ms:=TMemoryStream.Create;
      try
        pic.Bitmap.SaveToStream(ms);
        ms.Position:=0;
        for i:= 0 to  ms.size-1 do
          begin
            ms.Position:=i;
            ms.Read(buffer,1);
            result:=result+inttohex(ord(buffer),2);
          end;
      finally
        ms.free;
      end;
    end;function StrToBmp(s:string;pic:tpicture):boolean;
    var
      i,j:integer;
      ms:TMemoryStream;
      Buffer:char;
    begin
      s:=trim(s);
      ms:=tmemorystream.Create;
      try
        j:=length(s) div 2;
        for i:=1 to j do
          begin
            buffer:=char(HexToInt(copy(s,i*2-1,2)));
            ms.Position:=i-1;
            ms.Write(buffer,1);
          end;
        pic.Bitmap.LoadFromStream(ms);
      finally
        ms.free;
        result:=true;
      end;
    end;function HexToInt(S: String): LongInt;
    var
      I: Integer;
    begin
      Result := 0;
      for I := 1 to Length(S) do
      begin
        if S[I] in ['0'..'9'] then
          Result := Result * 16 + (Integer(S[I]) - 48)
        else if S[I] in ['A'..'F'] then
      Result := Result * 16 + (Ord(S[I]) - 55);
      end;
    end;要是谁能帮我改的好点,谢谢了
    [email protected]
      

  5.   

    这个合你要求
    http://haitian.myrice.com/FileToHex.txt