读书人

怎样将捕获的JPEG格式图像的数据流(十

发布时间: 2012-04-06 12:22:24 作者: rapoo

怎样将捕获的JPEG格式图像的数据流(十六进制)转换成JPEG的图片在控件上显示
怎样将捕获的JPEG格式图像的数据流(十六进制)转换成JPEG的图片在控件上显示
使用一个底层的摄像头捕获一副图像
但是得到的是一个十六进制的数据流
怎么让其在控件上显示?
数据流为
FF D8 FF E0 00 11 4A 46 49 46 00 01 02 03 04 05 06 07 08 09 0A
……………………………………………………(略去N多)
9B 59 2D C8 90 01 2C A4 6E 04 FD D1 F3 E3 F9 81 5C F7 B1 2D B3 FF D9


[解决办法]
LoadFromStream()
[解决办法]

Delphi(Pascal) code
uses      jpeg;//    保存Image1中的图象至数据库 :var         Ms:TmemoryStream;          Jpg  :      Tjpegimage;beginms:=TmemoryStream.Create;              Jpg.Assign(Image1.Picture.Graphic);Jpg.SaveToStream(Ms) ;                     Ms.Position :=0;ADOquery1.append;TBlobField(ADOquery1.FieldByName('img')).LoadFromStream(Ms);{//       就是将那个字段类型转的为TBlobField类型的字段,这样就可以保存这个字段的内容到磁盘           TBoobField(Table1.FieldByName('picture')).SaveToFile('c:\temp.bmp')     //       或者从一个磁盘读一个文件到这个字段中     TBlobField(Table1.FieldByName('picture')).LoadFromFile('c:\temp.bmp')类型的强制转换。其实(Table.FieldByName('picture'))也是一个类(TField).  }ADOquery1.Post;          Ms.Free ;            jpg.free;end; //     从数据库中读取图象到image2中:Var         Ms   :      TStringStream;      jpg:Tjpegimage;beginMs:=TstringStream.Create('');TBlobField(ADOquery1.FieldByName('img')).SaveToStream(Ms);   //类型的强制转换 如:TEdit(Sender).Text:=Str;  Ms.Position :=0;Jpg.LoadFromStream(Ms);           Image2.Picture.Assign(Jpg);         Ms.Free;         jpg.free;end; 例子:procedure TForm1.Button1Click(Sender: TObject);                         //插入片程 var testStream:TMemoryStream; begin try testStream := TMemoryStream.Create;                           //建存流 Image1.Picture.Graphic.SaveToStream(testStream);      //片保存至存流中 adoquery1.Close;          adoquery1.SQL.Clear; adoQuery1.SQL.Add('Insert into test (id,photo) values (:id,:photo)'); //行插入操作 adoquery1.Parameters.ParamByName('id').Value := '003'; adoQuery1.Parameters.ParamByName('photo').LoadFromStream(testStream,ftBlob); //取保存的存 adoquery1.ExecSQL; finally           testStream.Free;   //放存流 end; end;  procedure TForm1.Button2Click(Sender: TObject); //取片程 var         mStream:TMemoryStream;          JpgFile:TjpegImage; begin if not ADOQuery1.FieldByName('photo').IsNull then begin ; mStream:=TMemoryStream.Create ;           JpgFile:=TjpegImage.Create ; TBlobField(ADOQuery1.FieldByName('photo')).SaveToStream(mStream);  //示的BlobFiled保存至存流 mStream.Position :=0;         jpgfile.LoadFromStream(MStream);    image2.Picture.Assign(JpgFile); end else        begin      image2.Picture :=nil;    end; end;
[解决办法]
将16进制写进内存流,然后用Tjpegimage对象载入流。当然,要保证流是一个完整的JPG图。

读书人网 >.NET

热点推荐