delphi 处理图片(剪切,压缩)
剪切bmp:效果为指定的rect大小,若图片比rect小,则会放大。
都要uses Vcl.Imaging.jpeg;
需要注意的是FMX里也需要jpeg的支持,虽然没引用编译器不会报错,但用到jpg时会报内存错误。
procedure TForm1.Button1Click(Sender: TObject);
var
Bitmap: TBitmap;
MyRect1, MyOther: TRect;
begin
if self.OpenDialog1.Execute then
begin
MyRect1 := Rect(100, 100, 500, 500);
MyOther := Rect(100, 100, 500, 500);
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile(self.OpenDialog1.FileName); // bmp图片 也可以把jpg图片转换成bmp图片
self.Canvas.CopyRect(MyOther, Bitmap.Canvas, MyRect1); // 显示在窗体上 这个在VCL上可以,在FMX里没有这个属性
Bitmap.Free;
end;
end;
缩小jpg图片,效果: 图片为rect大小,若图片大于rect,则会按比例缩小成rect大小。
procedure TForm1.Button2Click(Sender: TObject);
var
bitCut: TBitmap;
bitEdit: TBitmap;
picOriginal: TPicture;
begin
picOriginal := TPicture.Create;
if self.OpenDialog1.Execute then
begin
picOriginal.LoadFromFile(OpenDialog1.FileName); //fileName为jpg文件路径
bitCut := TBitmap.Create;
bitCut.Width := 200;
bitCut.Height := 200;
bitCut.Canvas.StretchDraw(Rect(0, 0, bitCut.Width, bitCut.Height), picOriginal.Graphic); bitEdit := TBitmap.Create;
bitEdit.Width := picOriginal.Width;
// FMX里没有这个属性,要么把引用的FMX.Graphics换成VCL的
bitCut.Canvas.CopyRect(Rect(0, 0, bitCut.Width, bitCut.Height), bitEdit.Canvas, Rect(0, 0, 200, 20));
bitcut.SaveToFile('d:/dd.jpg');
Image1.Picture.Bitmap.Assign(bitCut);
// 该释放的对象要释放
bitEdit.Free;
bitCut.Free;
picOriginal.Free;
end;
end;
裁剪图片上一部分的rect:
procedure TForm1.Button3Click(Sender: TObject);
var
bmp: TBitmap;
jpg: TJpegImage;
MyRect, MyOther: TRect;
img: TImage;
begin
jpg := TJpegImage.Create;
bmp := TBitmap.Create;
if OpenDialog1.Execute then
begin
jpg.LoadFromFile(OpenDialog1.FileName);
bmp.Assign(jpg); // 把jpg的图片资源放在bmp内
MyRect := Rect(0, 0, 200, 200);
MyOther:= Rect(0, 0, 200, 200);
SetStretchBltMode(bmp.Canvas.Handle, COLORONCOLOR); // 这个函数 uses Winapi.Windows;
Self.Canvas.CopyRect(MyOther, bmp.Canvas, MyRect); // 将一个图片复制到另一个rect上
end;
FreeAndNil(bmp);
FreeAndNil(jpg);
end;
这些这VCL里都可以实现,在FMX里就需要变引用文件,但是用起来也不是那么方便,
在FMX里这样用,delphi自带的FMX.Graphics中有处理图片的函数,具体查看帮助手册:
这里贴出画图片的功能:
procedure TForm2.Button1Click(Sender: TObject);
var
MyBitmap: TBitmap;
MyRect: TRectF;
begin
if OpenDialog1.Execute then
MyBitmap := TBitmap.CreateFromFile(OpenDialog1.Files[0]);
MyRect := TRectF.Create(10,12,301,203);
Image1.Bitmap.Canvas.BeginScene;
Image1.Bitmap.Canvas.DrawBitmap(MyBitmap, MyRect, MyRect, 20); // 这个DrawBitmap Image中必须有图片,为空画不上去。。。可能是我方法不对
Image1.Bitmap.Canvas.EndScene;
end;
从本地一张图片中复制一个rect再保存到本地:
function CopyImgRect(f0, f1: String; x, y, w, h: Integer): Boolean;
// f0磁盘图片路径名,f1保存的文件名,x,y,w,h表示给定的矩形框范围值
var
b0,b1: TBitmap;
begin
result:=True; b0:=TBitmap.Create;
b1:=TBitmap.Create; b0.LoadFromFile(f0);
b1.Width:=w;
b1.Height:=h;
b1.CopyFromBitmap(b0,rect(x,y,w,h),0,0); // 从bitmap中复制bitmap
b1.SaveToFile(f1); // 保存到本地 b0.Free;
b1.Free;
end;
delphi 处理图片(剪切,压缩)的更多相关文章
- delphi GDI 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法
delphi 图片压缩代码 据说是位图缩放保持原图视觉效果最好的算法 若有更好的,请大神留言我也学习下,感谢! uses WinAPI.GDIPAPI, WinAPI.GDIPOBJ; var Bi ...
- [Swift通天遁地]四、网络和线程-(10)处理图片:压缩、缩放、圆角、CoreImage滤镜、缓存
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- 项目分享五:H5图片压缩与上传
一.简介 图片的压缩与上传,是APP里一个很常用的功能.我们来年看 ChiTuStore 是怎样做的.相关文件 App/Module/User/UserInfo.html,App/Module/Use ...
- Delphi7 流操作_压缩
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- android 06
1.android原理 菜单-->MainActivity-->onCreate-->setContentView(R.layout.item)-->layout(item.x ...
- Google开源库-Volley
Android平台的网络通信库,使是网通信 更快,更简单,更健壮 适合场景: 数据量不大,通信 频繁. 大数据,流媒体是不适合使用的 * 它主要是帮我们载入和缓存从远程网络加载的图片 * 所有的 ...
- Bitmap的加载和Cache
由于Bitmap的特殊性以及Android对单个应用所施加的内存限制,比如16M,这导致加载Bitmap的时候很容易出现内存溢出.比如以下场景: java.lang.OutofMemoryError: ...
- Volley网络框架完全解析(缓存篇)
在上一篇中讲完了Volley框架怎么使用,那么这篇就来讲讲Volley框架的缓存机制 我们看Volley内部源码发现: Volley框架内部自己处理了DiskBasedCache硬盘缓存,但是没有处理 ...
- [Swift]通天遁地Swift
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
随机推荐
- CSS中的相对定位和绝对定位
1.元素的position属性的值默认为static 就是没有定位,元素出现在正常的文档流中,,这个时候你给这个元素设置的left,right,bottom,top这些偏移属性都是没有效果的, 使用相 ...
- Android新浪微博获取评论信息、发表评论、转发微博等
首先前面一节中说过,获取用户的微博信息,这里简单介绍下获取微博的评论信息,以及对微博进行评论,转发微博等. OAuth认证,这里就不多说了, 我说名一下接口: 获取微博的评论列表接口: http:// ...
- Libevent库 编译与使用
Libevent官网:http://libevent.org/ windows 7下编译: 编译环境: windows 7 + VS2010 (1)解压libevent到F:\libevent\lib ...
- RadGridView标头分行
- angularjs 延迟更新和angularjsUI
angularjsUI库https://material.angularjs.org/latest/ ng-model-options="{ updateOn: 'blur' }" ...
- Python字典方法总结
1.清空字典中元素清空,dict变为{} L.clear()-> None. Remove all items from L 1 2 3 4 >>> L ={'shaw':2 ...
- java并发的理解
我认为并发大体上分为两种情况 1,多个线程或者进程访问公共资源,比如12306 2,多个线程访问同一个实例变量,比如tomcat 多个请求的线程访问同一个单例bean,如果bean是有状态的,就可能出 ...
- jQuery中的事件和动画——《锋利的jQuery》(第2版)读书笔记2
第4章 jQuery中的事件和动画 jQuery中的事件 加载DOM $(document).ready(function(){ // 编写代码... }); 可以简写成: $(function( ...
- JVM调优-关于jvm的一些基本概念
1.数据类型 java体系中,数据类型可分为2类:基本类型和引用类型.基本类型保存变量原始值,即:他代表的值就是数值本身: 而引用类型的变量保存引用值."引用值"代表某个对象的引用 ...
- GATK-BWA-MEM handle GRCh38 alternate contig mappings
1. For the Impatient # Download bwakit (or from <http://sourceforge.net/projects/bio-bwa/files/bw ...