首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎样将捕获的JPEG格式图像的数据流(十六进制)转换成JPEG的图片在控件上显示,该如何处理

2012-04-06 
怎样将捕获的JPEG格式图像的数据流(十六进制)转换成JPEG的图片在控件上显示怎样将捕获的JPEG格式图像的数

怎样将捕获的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图。

热点排行