请问如何把png图片正确的放入资源文件,并正确提取出来?

bpmb2 2007-12-04 05:52:10
我使用pngimage,

Png.LoadFromResourceName(Hinstance,'MyPngPIC');
报错:The png image cound not be loaded from the resource ID


这是rc文件的内容

MyPngPIC PngType 3199870.png


高手帮帮忙!
...全文
731 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Heyongfeng 2007-12-07
  • 打赏
  • 举报
回复
支持
zhao_yong 2007-12-06
  • 打赏
  • 举报
回复
同意樓上,支持!
天行归来 2007-12-06
  • 打赏
  • 举报
回复
直接利用rc文件,相当于把资源嵌入主程序,如果图片等资源很多情况下,将会导致程序过大。建议把资源做成dll,然后通过函数调用。
bpmb2 2007-12-05
  • 打赏
  • 举报
回复
找到问题了:

在RC文件里面要用RCDATA类型, MyPng RCDATA 00001.png 就可以顺利取得PNG资源了
天行归来 2007-12-04
  • 打赏
  • 举报
回复
把这些资源打包编译成dll,然后通过以下接口访问。
我是用标准Image,你可以把类型改成PNGImage。

library resource;

uses
SysUtils,
Classes,
Jpeg,
Graphics,
ExtCtrls;

{$R *.res}
{$R res.res}

procedure LoadJpegFromRes(const Image: TImage; ResName: string); stdcall;
var
Stream: TStream;
Jpeg: TJpegImage;
begin
Stream := TResourceStream.Create(HInstance, ResName, PChar('JPG'));
Jpeg := TJpegImage.Create;
try
Jpeg.LoadFromStream(Stream);
if Image.Stretch then Image.Canvas.StretchDraw(Rect(0,0,Image.Width,Image.Height),Jpeg)
else Image.Canvas.Draw(0,0,Jpeg);
finally
Jpeg.Free;
Stream.Free;
end;
end;

procedure LoadIconFromRes(const Icon: TIcon; ResName: String); stdcall;
var
Stream: TStream;
begin
Stream := TResourceStream.Create(HInstance, ResName, PChar('ICO'));
try
Icon.LoadFromStream(Stream);
finally
Stream.Free;
end;
end;

exports
LoadJpegFromRes,
LoadIconFromRes;
begin
end.

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧