【每日一发】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
原创粉丝点击