寻找带Canvas过程的jpg控件 有没有带Canvas和LoadFromFile、SaveToFile的jpg控件。我想找一个。谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 uses jpeg;然后就用TImage就行了 jpeg是不可以直接画的所以没有canvas必须先assign给一个tbitmap, 画完再assign回来至于loadfrom等方法TjpegImage有啊procedure TForm1.Button1Click(Sender: TObject);var BitMap1,BitMap2 : TBitMap; MyFormat : Word;begin BitMap2 := TBitMap.Create; BitMap1 := TBitMap.Create;try BitMap1.LoadFromFile('c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.bmp'); BitMap2.Assign(BitMap1); // Copy BitMap1 into BitMap2 BitMap2.Dormant; // Free up GDI resources BitMap2.FreeImage; // Free up Memory. Canvas.Draw(20,20,BitMap2); // Note that previous calls don't lose the image BitMap2.Monochrome := true; Canvas.Draw(80,80,BitMap2); BitMap2.ReleaseHandle; // This will actually lose the bitmap; finally BitMap1.Free; BitMap2.Free; end;end; uses JPEG;var bm : TBitmap; jpg : TJPEGImage;begin bm := TBitmap.Create(); ... //draw on bm.Canvas jpg := TJPEGImage.Create; jpg.Assign(bm); jpg.SaveToFile('c:\test.jpg'); jpg.Free(); bm.Free;end; 我明白帖主的意思,其实在应用中经常遇到这样的情况:一个图片数据用BMP保存大概有500M,一般的PC直接用TBitmap来访问几乎是不可能的;而这么大的数据用Jpg保存可能就只有不到100M,用TJpegImage来访问的话,速度都不错,也可以用Canvas.Draw(0,0,JpegImage)来显示,但由于TJpegImage没有Canvas变量,无法用Canvas.CopyRect、StretchDraw、BitBlt等函数来操作,即你想放大你的Jpeg,你如何实现?而如果用TBitmap.Assign(Jpeg)的方式的话,也是回到老路上去了:程序同样得维护一个近500M的点位图存储空间,也是几乎不可能吃得消的。 用JPEG能节省内存???怎么会有如此不合逻辑的想法?处理JPEG只会花费更多的内存拿TJPEGImage来说,如果要利用Image将其完整显示出来,在其内部就已经完成了生成位图的操作. Canvas是什么?逻辑上来说,有点和MFC中的CDC功能类似,就是封装GDI,关联DC和相关GDI操作.很明显GDI操作的是DIB,DDB 有些软件能处理很庞大的图像不是因为直接在内存里处理JPEG(这怎么可能?JPEG可是有损的).而是把图分块进行处理,内存里的只是当前显示的一小块区域,当然不至于耗光内存.真正对JPEG的文件数据直接进行处理的只是像图像旋转这样的操作(专业的软件是肯定要这么做的,还是因为JPEG独特的压缩方式) JPEG不一定有损,也有无损的,医学上就用无损的不过delphi不支持 delphi编写自定义unit的问题 复制文件的问题? 三层的B/S架构,各位看看,给个意见 delphi离线浏览器哪里有下载??? 线程如何创建和释放(在线等) 关于 CASE 的语句 ==================== 您好,请教sendmessage 与 postmessage 的参数。 谢谢您 请问我这样为什么第一条记录总不打印呢? 函数返回类型可以为array么? 关于用鼠标隐藏控件的问题.没分啦,等有分就加上!!!!一定!!! adoquery1.SQL.add的方法的使用怪事请问高手 delphi 中DateTimePicker的用法
所以没有canvas
必须先assign给一个tbitmap, 画完再assign回来
至于loadfrom等方法TjpegImage有啊procedure TForm1.Button1Click(Sender: TObject);var
BitMap1,BitMap2 : TBitMap;
MyFormat : Word;
begin
BitMap2 := TBitMap.Create;
BitMap1 := TBitMap.Create;
try
BitMap1.LoadFromFile('c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.bmp');
BitMap2.Assign(BitMap1); // Copy BitMap1 into BitMap2
BitMap2.Dormant; // Free up GDI resources
BitMap2.FreeImage; // Free up Memory.
Canvas.Draw(20,20,BitMap2); // Note that previous calls don't lose the image BitMap2.Monochrome := true;
Canvas.Draw(80,80,BitMap2);
BitMap2.ReleaseHandle; // This will actually lose the bitmap;
finally
BitMap1.Free;
BitMap2.Free;
end;
end;
bm : TBitmap;
jpg : TJPEGImage;
begin
bm := TBitmap.Create();
... //draw on bm.Canvas jpg := TJPEGImage.Create;
jpg.Assign(bm);
jpg.SaveToFile('c:\test.jpg');
jpg.Free();
bm.Free;
end;
不过delphi不支持