Delphi中标准控件是不支持png图片的,据说从Window2000后增加
gdiplus.dll库处理更多的gdi图像,其中包括png。
关键的几个api
GdipCreateBitmapFromFile(),从文件载入图像(不单只Bitmap)
GdipCreateBitmapFromStreamICM(),从流中入图像
GdipCreateHBITMAPFromBitmap(),获取图像的位图
GdipDisposeImage(),释放图像资源
开始直接调用
GdipCreateBitmapFromFile没有成功,返回18的错误
查一下资料这个错误是:
“GdiplusNotInitialized”
看来必须的初始化gdiplus。
看来必须的初始化gdiplus。
网上找到一套“
TGPBitmap”相关的组件,封装了gdiplus的调用。可以参考其中的代码。
png载入后,再取出其位图。特别注意,这个位图是32位的。包括了R、G、B、
Alpha四个色值,其中Alpha就是透明度。UpdateLayeredWindow()API函数可以支持Alpha风格。
如何从流中载入?如何将VCL的流处理成IStream?看看代码吧。
效果图:
准备一张Png图片,编写rc文件,然后加入到工程中。
代码:
CJ7.rc
Png_Cj7 PNG "CJ7.png"
CJ7Unit.pas</