delphi使用流实现jpg文件的处理 (2)

上传人:平*** 文档编号:13300542 上传时间:2017-10-23 格式:DOC 页数:6 大小:33.27KB
返回 下载 相关 举报
delphi使用流实现jpg文件的处理 (2)_第1页
第1页 / 共6页
delphi使用流实现jpg文件的处理 (2)_第2页
第2页 / 共6页
delphi使用流实现jpg文件的处理 (2)_第3页
第3页 / 共6页
delphi使用流实现jpg文件的处理 (2)_第4页
第4页 / 共6页
delphi使用流实现jpg文件的处理 (2)_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《delphi使用流实现jpg文件的处理 (2)》由会员分享,可在线阅读,更多相关《delphi使用流实现jpg文件的处理 (2)(6页珍藏版)》请在金锄头文库上搜索。

1、一、 原理介绍-流式数据的类型及其应用在 Dephi 中提供了 TStream 来支持对流式数据的操作。 TStream 是万流之源。但由于它是一个抽象类,故不能被直接使用;而要使用其相应的子类,如:TFileStream 、TStringStream、TMemoryStream、TBlobStream、TWinSocketStream 和 TOleStream。TStream 提供了统一、简洁的方法来进行数据的读写。1.)SaveToStream(Stream: TStream ); 作用:将类中的数据写到 Stream 的当前位置中2.)LoadFromStream(Stream: TSt

2、ream); 作用:从当前位置读入 Stream 里的数据实际使用时我们基本上只要使用上面两个函数就可以了。二、所遇到的问题及相应的解决方法为了节省图像的存储空间和使用更加方便,决定采用 JPEG 这种图像格式。(一)所遇到的问题第一、在 Delphi 5 中进行画图所用到的组件是 TImage,所生成的图像的格式为 BMP 格式,而为了节省图像的存储空间,图像在数据库里存储的格式须为 JPEG 格式,这样就产生了图像格式转化的需求;而 TImage 本身并不直接提供这两种图像格式之间的转化。第二、怎样将存储在 Microsoft Access 数据库中的图像取出并且显示出来:在 Delphi

3、 5中,能提供这种功能的组件是 TDBImage,但该组件却存在着一个很大的缺陷:它所能显示的图像类型只能是一些图标文件,元文件和 BMP 文件,而不能支持 JPEG 格式的图像在该组件中的显示;但根据实际需要,在 Microsoft Access 数据库中所存储的图像数据却是以 JPEG 格式保存的。(二)相应的解决方法为了解决上述两个问题,可以采用目前数据库中一种名为大二分对象(BLOB-Binary Large Object),它是用来处理某些特殊格式的数据的。 BLOB 在数据库的表中实际上是以二进制数据的形式存放的。为了处理 BLOB 字段,可以借鉴一些可视的桌面数据库的方法。在这里

4、,我们选择了通过内存流的方式来完成;使用内存流,可减少磁盘操作,大大提高运行效率。具体的过程和相关的程序代码如下:1、如何实现在 Microsoft Access 数据库中的图像存储:这里是利用 TStream 的子类 TMemoryStream 向 Microsoft Access 数据库中存储图像的。下面的这段代码是在按了“保存 ”按钮之后所触发的事件处理程序:procedure TForm1.Button1Click(Sender: TObject);varMyJPEG : TJPEGImage;MS: TMemoryStream;beginMyJPEG := TJPEGImage.Cr

5、eate;trywith MyJPEG dobeginAssign(Image.Picture.Graphic);MS:=TMemoryStream.create;SaveToStream(MS);MS.Position:=0;Table1.Edit;TBlobField(Table1.FieldbyName(Image).LoadFromStream(MS);Table1.Post;messagebox(getactivewindow(),图像保存完毕!, 保存,mb_ok);end;finallyMyJPEG.Free;end;end;在这段代码里 TStream 的子类 TMemoryS

6、tream 利用内存流起到了将 BMP 格式转化为JPEG 格式的中间桥梁的作用。2、如何将图像从 Microsoft Access 数据库中取出并显示出来:下面的这段代码是在按了“查看图像 ”按钮之后所触发的事件处理程序:procedure TForm1.Button1Click(Sender: TObject);var tempstream:TStringStream;tempjpeg:TJPEGImage;begintrytempstream:=TStringStream.Create();TBlobField(Query1.FieldByName(Image).SaveToStream

7、(tempstream);tempstream.Position:=0;tempjpeg:=TJPEGImage.Create;tempjpeg.LoadFromStream(tempstream); DBImage1.Picture.Bitmap.Assign(tempjpeg);finallytempstream.Free;tempjpeg.Free;end;end;这段代码的主要作用是:首先将查询结果中的 JPEG 图像格式数据保存到 TStringStream中去,然后设置数据指针在 TStringStream 中的位置为 0;接着从 TStringStream 中读入相关数据,并把它

8、们赋给 TDBImage.Picture.Bitmap,这样一来就实现了将数据库中所存储的 JPEG格式的数据转化为 BMP 格式,并在 TDBImage 中将图像显示出来。最后将 TStringStream 和TJPEGImage这两个对象释放掉。特别要注意的是不能在设计阶段设置 TDBImage 的 DataField 属性,而只能通过写代码的形式在运行阶段把利用流式数据所转化过来的新格式的图像数据赋给TDBImage.Picture.Bitmap。 2003-10-7 11:10:00 发表评语 2003-10-7 11:11:44 BMP 格式转化为 JPEG 格式 uses Jpeg

9、;procedure CopyBmpToJpeg(BmpFile,JpegFile:string);varBmp:TBitmap;Jpeg:TJPEGImage;beginBmp:=TBitmap.create;Jpeg:= TJpegImage.Create;tryBmp.LoadFromFile(BmpFile);Jpeg.Assign(Bmp);Jpeg.SaveToFile(JpegFile);finallyBmp.Free;Jpeg.Free; end;end; 2003-10-7 14:28:34 图片缩放 Var B:Tbitmap; /临时位图BeginB:=Tbitmap.C

10、reate; /建立临时位图B.Assign(YourBitmap); /采用相同色彩深度With B do BeginWidth:=90; /临时位图的大小为 90x90Height:=90;End;B.canvas.StretchDraw(B.canvas.Cliprect,YourBitmap); /缩放适应B.SavetoFile(YourFileName); /保存B.Free;End; /搞定 2003-10-22 10:33:33 JPEG 和 BMP 同时存入,两种不同的方法,文件流和内存流procedure TForm1.Button1Click(Sender: TObjec

11、t);varfs:TFileStream;MS: TMemoryStream;Bmp:TBitmap;MYJpeg:TJPEGImage;beginif OpenPictureDialog1.Execute thenbeginif ExtractFileExt(OpenPictureDialog1.FileName) = .bmp thenbeginBmp:=TBitmap.create;MYJpeg:= TJpegImage.Create;MS:=TMemoryStream.create;tryBmp.LoadFromFile(OpenPictureDialog1.FileName);wit

12、h MYJpeg dobeginAssign(Bmp);MS.Position:=0; SaveToStream(MS);Table1.Edit;TBlobField(Table1.FieldByName(ZGZP).LoadFromStream(MS);Table1.Post;end;finallyBmp.Free;MYJpeg.Free;MS.Free;end;endelsebeginfs:=TFileStream.Create(OpenPictureDialog1.FileName,fmOpenRead);TryTable1.Edit;TBlobField(Table1.FieldByN

13、ame(ZGZP).LoadFromStream(fs);Table1.Post;Finallyfs.free;end;end;end; 2003-11-13 21:03:18 图片的缩放 procedure TForm1.Button1Click(Sender: TObject);varb: TBitmap;/原图片nb: TBitmap;/Resize 以后的图片r: TRect;beginb := TBitmap.Create;if OpenDialog1.Execute thenbeginb.LoadFromFile(OpenDialog1.FileName);nb := TBitma

14、p.Create;/你可以自己定义高度和宽度,这里是都变成一半 nb.Height := b.Height div 2; /高度变为原来的一半nb.Width := b.Width div 2; /宽度变为原来的一半r.TopLeft := Point(0, 0);r.BottomRight := Point(nb.Width, nb.Height);with nb.Canvas dobeginPen.Style := psDash;Brush.Style := bsClear;Rectangle(0, 0, nb.Width, nb.Height);StretchDraw(r, TGraphic(b);end;if SaveDialog1.Execute then nb.SaveToFile(SaveDialog1.FileName);nb.Free;end;b.Free;end;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号