如何绘制Png文件中的指定区域的图像?(200分)

  • 主题发起人 主题发起人 huweiji
  • 开始时间 开始时间
H

huweiji

Unregistered / Unconfirmed
GUEST, unregistred user!
PngImage的 TPngObject 有一个Draw方法,只能在画布上全部绘制Png文件的所有图像.
假设某个按钮的几种不同状态图片放在同一个Png文件里,如何分别取出相应的图片?
TPngObject提供了一个 Draw(Canvas:TCanvs; Rect:TRect) 方法,是否还要重载一个
Draw(Canvas:TCanvs; DestRect, SourRect:TRect)方法?
 
换一种方法,用资源是否可以,把几种图片都编译进资源,根据按钮状态调用。
 
首先得感谢有人回贴,因为我每次在DFW发贴都很难见到回贴.

我现在主要是为处理Png图片而发愁,贴子所举按钮也只是
为说明情况,如果用资源文件或BMP图片等方法我也不需问了.

我的图片是在网上下的,
我也曾试过先把Png转换为BMP,然后再处理,但是透明等效果就没有了,
后来查了资料可能是BMP不支持alpha通道等特性,所以没有透明效果.
 
我现在是把Png图片画到TBitmap上,然后再使用CopyRect方法复制到目标Canvas.
但这样做虽然把图片取出来了,但从效率和效果上显然都是有问题的。
难道没有更好的方法处理Png图片了吗?
 
随说bmp不支持透明通道,
只能说TBitmap没有直接半透明画出而已,其实他是支持32位图像的


我的这个贴子就说了32位图像透明处理的
http://www.delphibbs.com/keylife/iblog_show.asp?xid=18293

主要是用TBitmap
设为 PixelFormat := pf32bit;

如果你要用PNG的话
再去下一个TGraphicEx9.9就可以支持,
装了,TImage就可以直接支持TGA,PNG,BMP,JPG,TIFF


temp :TBitmap;
temp := TBitmap.Create;
temp.PixelFormat := pf32bit;
Image1.Picture.LoadFromFile('1.png');
temp.assign(Image1.Pictue.Graphic);
//现在temp就是32位的图像了,后面的就可以通过我的TBitmap32透明的画出图像了





需要源程序可以去我的个人网站下,也可以加我QQ:250198418,我发一个例子给你
http://lqcros.wy8.net
 
后退
顶部