用FMX压缩图片,发现FMX里的canvas没有draw,stretch,cliprect类,FMX里程序创建时会自动引用FMX.Graphics,
而这个单元内的TBitmap类的Canvas没有StretchDraw属性,也没有ClipRect类,所以定义TBitmap的图片不能裁剪。
而在VCL里,同样的方法却可以裁剪,原因在于vcl里引用的是vcl.graphics,引用单元不一样,平台不一样.
解决方法:把FMX里自身引用的FMX.Graphics删掉,换成VCL.Graphics.
XE里的FMX是跨平台的,delphi7是Windows用的,我想应该是windows上面有的东西别的平台不一定有,所以引用的单元也就不同,设计人员这么分也是有他的道理的,虽然我不知道他的用意。。
FMX和VCL区别很大,比如说以前用ExtractFilePath(application.Exename)来获取当前程序路径,而现在MFX里applicatin没有Exename属性,哈哈,怎么办呢,
别急,总会有办法的,ExtractFilePath(ParamStr(0))和GetCurrentDir+'\'都可以获取当前路径。

uses
Vcl.Imaging.jpeg, Vcl.Graphcis;
var
jpg: TJpegImage;
bmp: TBitmap;
begin
jpg := TJpegImage.Create;
bmp := TBitmap.Create;
jpg.LoadFromFile('d:/test.jpg');
bmp.Width := jpg.Width; //宽度和高度可以自己设
bmp.Height:= jpg.Height;
bmp.Canvas.StretchDraw(bmp.Canvas.ClipRect, jpg);
jpg.Assign(bmp);
jpg.CompressionQuality := 10; //压缩大小可调整
jpg.Compress;
jpg.SaveToFile('d:/aa.jpg'); //保存压缩后的图片,或者draw在Form上
bmp.Free;
jpg.Free;
end; 还有BeginUpdata;和EndUpdata;VCL和FMX也是不一样的,不过可以直接用就行。
这个只是压缩jpg格式的,png不行,会出现jpeg error #53错误,
如果是jpg出现这个错误,可能是因为文件太大,格式修改过,文件名是中文问题,需要解码。
可以前面加个if ExtractFileExt(fn) = '.jpg' then begin end;

XE下的FMX中压缩图片的更多相关文章

  1. firework压缩图片类似于GD库中压缩图片的思路

    1.先建一张空白图片, 2.再把需要压缩的图片拖上去, 3.符合画布 4.调到需要的大小

  2. Vue前端压缩图片

    一.在组件包下新建compressImage.js // 压缩图片 // eslint-disable-next-line no-unused-vars export function compres ...

  3. ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结

    相册 iphone的相册包含摄像头胶卷+用户计算机同步的部分照片.用户可以通过UIImagePickerController类提供的交互对话框来从相册中选择图像.但是,注意:相册中的图片机器路径无法直 ...

  4. WEB前端开发中的图片压缩

    web前端开发中,图片的重要性不言而喻,而由于一些图片的大小加上现在国内的网速不给力等种种原因,我们非常有必要对网站使用的图片进行压缩,压缩图片必然会带来图片质量的损失,我们要尽可能的在质量降低很小的 ...

  5. ios中摄像头/相册获取图片压缩图片上传服务器方法总结

    本文章介绍了关于ios中摄像头/相册获取图片,压缩图片,上传服务器方法总结,有需要了解的同学可以参考一下下.     这几天在搞iphone上面一个应用的开发,里面有需要摄像头/相册编程和图片上传的问 ...

  6. Android笔记(七十五) Android中的图片压缩

    这几天在做图记的时候遇第一次遇到了OOM,好激动~~ 追究原因,是因为在ListView中加载的图片太大造成的,因为我使用的都是手机相机直接拍摄的照片,图片都比较大,所以在加载的时候会出现内存溢出,那 ...

  7. Android中的图片压缩

    1.android中计算图片占用堆内存的kB大小跟图片本身的kB大小无关,而是根据图片的尺寸来计算的. 比如一张 480*320大小的图片占用的堆内存大小为: 480*320*4/1024=600kB ...

  8. Android 下压缩图片—微弱失真

    Android下压缩图片的方法: 大概能将3M左右的图片压缩到100K左右, 几乎不失真. 代码如下: import java.io.FileNotFoundException; import jav ...

  9. MVC下 把数据库中的byte[]值保存成图片,并显示在view页面

    MVC下 把数据库中的byte[]值转成图片,并显示在view页面 controller中的action方法 //显示图片[AllowAnonymous]public ActionResult Sho ...

随机推荐

  1. python基础篇之进阶

    python基础篇之进阶 参考博客:http://www.cnblogs.com/wupeiqi/articles/5115190.html python种类 1. cpython  使用c解释器生产 ...

  2. Maven入门----MyEclipse创建maven项目(二)

    新建项目: Next next next 新建项目后,MyEclipse会自动从远程仓库中下载支持包,需要几分钟左右时间. 项目结构图: HelloWorld.java public class He ...

  3. Java [parms/options] range -b 100 -c 10 -i 100 -t 300 -s 180

    3 down vote Just run the command java -X and you will get ans of all_ C:\Users\Admin>java -X -Xmi ...

  4. Firewalld常用命令

    原文地址:http://www.excelib.com/article/288/show Firewalld防火墙中所使用到的命令可以分为三大类:安装卸载.维护和策略操作. 安装 在Centos7中默 ...

  5. android httpclient 设置超时

    3.X是这样的 HttpClient httpClient=new DefaultHttpClient();4.3是这样的CloseableHttpClient httpClient = HttpCl ...

  6. C#获取网络状态

    /// <summary> /// 获取网络状态 /// </summary> /// <param name="ip">目标IP地址</ ...

  7. Web验证码图片的生成-基于Java的实现

    验证码图片是由程序动态产生的,每次访问的内容都是随机的.那么如何采用程序动态产生图片,并能够显示在客户端页面中呢?原理很简单,对于java而言,我们首先开发一个Servlet,这个Servlet的任务 ...

  8. 图灵机器人,web录音实现自动化交互问答

    一.图灵机器人 介绍 图灵机器人 是以语义技术为核心驱动力的人工智能公司,致力于“让机器理解世界”,产品服务包括机器人开放平台.机器人OS和场景方案. 官方地址为: http://www.tuling ...

  9. 微信小程序中在页面中实现下拉刷新显示提醒语后在消失

    最近在做小程序的时候遇见一个问题,就是页面要下拉刷新给客户一个提醒语,查看了小程序的官方文档 这里有个注意点:如果你是一页进行下拉刷新就在那个文件夹的json里面加上"enablePullD ...

  10. Hadoop Serialization -- hadoop序列化详解 (2)

    回顾: 回顾序列化,其实原书的结构很清晰,我截图给出书中的章节结构: 序列化最主要的,最底层的是实现writable接口,wiritable规定读和写的游戏规则 (void write(DataOut ...