有一字符串:str:='0x90CA6D1B6075AD0000000000CB4BA141145492819C4EDF7E004EE3968C3E0C3F874EBA68435F0B128E308543834F20611C579604033005428342894881511964865D110B935396608C33879E8F440E4B065391AD89618E0983558D5E873D07440A4D13520431079E8334023E865795AF01400A458230033C11330499105116'(255位).这是图片保存到数据库中的值.我现在想把这个值"直接"转换成图片,怎么办啊?
   与此相关的我看了很多贴子了,都是关于图片和数据库之间的存取问题.我现在是想直接从某个地方读到此255位的值,然后我么写代码能在Image中显示啊?????????

解决方案 »

  1.   

    把它化做内存流SaveToStream
    LoadFromStream读出来就行了
    那用管那么多的东西的啊
      

  2.   

    pzl625() ( ) 信誉:100 
    把它化做内存流SaveToStream
    LoadFromStream读出来就行了
    那用管那么多的东西的啊能不能给我一个具体一点的代码.把它化成内存流后,我想以十六进制的方式进行保存,以后再以这种方式找开图片,怎么弄啊??谢谢了
      

  3.   

    function Str2Hex(const data: array of byte; len: integer): string;
    const
       Hex: array[0..15] of char = '0123456789ABCDEF';
    var
       i: Integer;
    begin
       setlength(result, length(data) * 2);
       for i := 0 to Len - 1 do
       begin
          result[i * 2 + 1] := Hex[data[i] shr 4];
          result[i * 2 + 2] := Hex[data[i] and $F];
       end;
    end;procedure Hex2Int(var Data: array of Byte; const Source: string);
    var
       i: Integer;
       Size: Integer;
       Hex2: string;
    begin
       Size := Length(Source);
       i := 0;
       while i < Size do
       begin
          Hex2 := '$' + Source[i + 1] + Source[i + 2];
          Data[i div 2] := StrToInt(Hex2);
          inc(i, 2);
       end;
    end;function PicToHex(FileName:string):string; //图片转16进制字符串
    var
       f: file;
       NumRead: integer;
       Buffer: array[1..1024] of byte;
    begin
       AssignFile(f, FileName);
       Reset(f, 1);
       repeat
          BlockRead(f, Buffer, BUF_SIZE, NumRead);
          if NumRead = 0 then
             break;
          Result := Str2Hex(Buffer, NumRead); //将每个字节以16进制表示
       until (NumRead = 0);
       CloseFile(f);
    end;//这样应用procedure TForm1.Button1Click(Sender: TObject);
    var
       PicHex: string;
       buffer: array[1..1024] of Byte;
       ms: TMemoryStream;
    begin
       PicHex:=PicToHex('C:\Up_Show.bmp');
       ms := TMemoryStream.Create;
       Hex2Int(buffer, PicHex);
       ms.WriteBuffer(Buffer, Length(PicHex) div 2);
       ms.Position := 0;
       Image1.Picture.Bitmap.LoadFromStream(ms);
       ms.free;
    end;
      

  4.   

    我试了下,会报错误:Bitmap image is not valid.这是怎么回事啊?我的图片格式也是正确的了还有,我把图片转换成十六进制后,返回的字符串有2000多位啊?太多了啊,是不是图片转换后都有这么多位的数据啊??
      

  5.   

    图片存在硬盘上是多大,返回的16进制就有多大
    一般按照24bit位图文件来算,1个像素占3个字节,800*600的图片就是800*600*3再加文件头信息,你自己算算有多少