我使用pngimage,Png.LoadFromResourceName(Hinstance,'MyPngPIC');
报错:The png image cound not be loaded from the resource ID
这是rc文件的内容MyPngPIC PngType 3199870.png
高手帮帮忙!

解决方案 »

  1.   

    把这些资源打包编译成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.
      

  2.   

    找到问题了:在RC文件里面要用RCDATA类型,   MyPng  RCDATA  00001.png   就可以顺利取得PNG资源了
      

  3.   

    直接利用rc文件,相当于把资源嵌入主程序,如果图片等资源很多情况下,将会导致程序过大。建议把资源做成dll,然后通过函数调用。