【每日一发】DELPHI位图文件的裁剪和伸缩操作
来源:互联网 发布:jquery.min.js.dump 编辑:程序博客网 时间:2024/04/28 19:52
在工作中有用到缩略图展示,这个时候就需要对图片进行伸缩处理,也有时候会遇到需要裁剪部分区域,比如正中间的部分,通过在网上查阅资料,发现通过Windows的两个API就可以很方便的搞定。
先贴下代码:
procedure FitBitmap(const Source,Dest:string;const x,y:integer;const ColorBit:TPixelFormat);var abmp,bbmp:tbitmap; scalex,scaley:real;begin abmp:=tbitmap.Create; bbmp:=tbitmap.Create; try abmp.LoadFromFile(Source); scaley := abmp.Height / y; scalex := abmp.Width / x; bbmp.Width := round(abmp.Width / scalex); bbmp.Height := round(abmp.Height / scaley); bbmp.PixelFormat := pf8bit; SetStretchBltMode(bbmp.Canvas.Handle, COLORONCOLOR); stretchblt(bbmp.Canvas.Handle, 0, 0, bbmp.Width, bbmp.Height, abmp.Canvas.Handle, 0, 0, abmp.Width, abmp.Height, srccopy); bbmp.SaveToFile(Dest); finally abmp.Free; bbmp.Free; end;end;
从上面的代码可以看到,主要用到两个API:
SetStretchBltMode
stretchblt
其中真正发挥作用的是第二个,可以实现图片的伸缩和裁剪,伸缩和裁剪的区别主要在于原始位图的取图的区域。这个函数的参数很多,但是分为了三个部分:
1 目标位图:
分别制定了位图画布的句柄
开始画图的 TopeLeft属性
画图矩形的宽和高
2 原始位图部分:
原始位图画布的句柄
原始画布的TopeLeft属性
原始画布区域的宽和高
3 模式
想要裁剪图片就需要修改原始位图部分的参数即可。
0 0
- 【每日一发】DELPHI位图文件的裁剪和伸缩操作
- 【每日一发】Delphi从Dll中提取自定义的资源文件
- flash 交互操作:裁剪位图
- 每日心情一发
- 每日一发Python---Python中的__name__和类
- 【每日一发】同样4个字节的浮点数和整数为什么表达的范围有很大差异
- 【每日一发】基于JS的图片瀑布流
- 每日一发Python---Python中双冒号的作用[::]
- 浅谈位图的淡入淡出和渐隐,位图操作
- Delphi 文件操作的封装
- delphi文件操作的总结
- bmp位图和OpenGL的像素操作
- 位图文件的打开和保存
- C#对图片文件的压缩、裁剪操作初探
- 【转】C#对图片文件的压缩、裁剪操作初探
- C#实现对图片文件的压缩、裁剪操作实例
- 位图的光栅操作
- 在VC中自建操作BMP位图文件的类
- INNODB整体讲解
- Android的startservice和bindservice
- Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0
- 【好程序员笔记分享】——分类
- cesiumjs开发实践(二)
- 【每日一发】DELPHI位图文件的裁剪和伸缩操作
- java线程池和队列详细讲解
- 异步加载数据Thread与AsyncTask比较
- 领导者都病态,该如何与其相处?
- ubuntu ping响应慢的解决
- UVa537 - Artificial Intelligence?
- 第六周 项目一 深复制体验(1)
- Python字符串操作
- RGB与YCbCr颜色空间的转换