TGPImage加载png文件流为什么会报错?

时间:2021-08-19 13:57:24
procedure TForm1.Button1Click(Sender: TObject);
var
  Stream: TMemoryStream;
  istreamTest: IStream;
  GPImage: TGPImage;
  Graphic: TGPGraphics;
begin
  Stream := TMemoryStream.Create;
  Stream.LoadFromFile('c:\nofind.png');
  istreamTest:= TStreamAdapter.Create(Stream);
  Graphic := TGPGraphics.Create(Canvas.Handle);
  try
    GPImage := TGPImage.Create('c:\nofind.png');
    //GPImage := TGPImage.Create(istreamTest);  //这句会报错
    Graphic.DrawImage(GPImage, 0, 0);
  finally
    Stream.Free;
    GPImage.Free;
    Graphic.Free;
  end;
end;


直接用文件加载是没问题的,
加载bmp的文件流也OK,换成png就不行,真是怪了。。。

19 个解决方案

#1


顶起呀,没人知道么?

#2


再顶顶~

#3


处理png要用pngimage单元
在这里: http://pngdelphi.sourceforge.net

#4


引用 3 楼 ccdarkness 的回复:
处理png要用pngimage单元 
在这里: http://pngdelphi.sourceforge.net


加了也一样的,跟这个没关系。

#5


不信没人知道~
加分100~~~

#6


上班了,应该有人来了吧,再up~

#7


http://www.delphifans.com/SoftView/SoftView_2496.html

看这个 使用其中的TPngSpeedButton 即可

#8


下载一个支持png的开发包 。
http://pngdelphi.sourceforge.net/pngimage143.zip

效果和代码参考
http://borland.mblogger.cn/jinjazz/posts/21093.aspx

#9


不好意思,没有注意你的问题

#10


这位大叔的文章可能会对你有帮助
http://blog.csdn.net/maozefa/archive/2007/07/12/1685930.aspx

#11


谢谢楼上,那位大叔的文章看了,问题依旧

#12


你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。

#13


弱弱的问一句,楼上大叔今年五十几了?

#14


56了,哈哈

#15


引用 12 楼 maozefa 的回复:
你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。


我测试了一下,
GPImage := TGPImage.Create(istreamTest); 这一句在脱离ide运行时确实没有报错,
但在执行Graphic.DrawImage(GPImage, 0, 0); 这句时报错。。。

#16


下载个PNG类就可以用了,
下载地址
http://download.csdn.net/source/226243

使用

uses
pngimage;
var
  filename : string;
    Bitmap : TBitmap;
    PNG:   TPNGObject;
begin
PNG := TPNGObject.Create;
          Bitmap := TBitmap.Create;
          try
                   PNG.LoadFromFile(filename);
                  Bitmap.Assign(PNG);
          finally
                  PNG.Free;
          end;
end

#17



uses
pngimage;
var
  filename : string;
    gif : TGIFImage;
    PNG:   TPNGObject;
begin
                    PNG := TPNGObject.Create;
          Bitmap := TBitmap.Create;
          try
                   PNG.LoadFromFile(filename);
                  gif.Assign(PNG);
          finally
                  PNG.Free;
          end;
end

#18


引用 15 楼 marry2000 的回复:
引用 12 楼 maozefa 的回复:
你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。 
 

我测试了一下, 
GPImage := TGPImage.Create(istreamTest); 这一句在脱离ide运行时确实没有报错, 
但在执行Graphic.DrawImage(GPImage, 0, 0); 这句时报错。。。 


我用你的代码(1楼)脱离ide运行,什么错误也没有,图片也能正确地显示在窗口左上角。

#19


真是头疼,
我在win2000系统的机子上测试,脱离ide运行,Graphic.DrawImage(GPImage, 0, 0);会报错,
在xp系统的机子测试,结果如楼上所说。没有报错,图片也能正确显示。

#1


顶起呀,没人知道么?

#2


再顶顶~

#3


处理png要用pngimage单元
在这里: http://pngdelphi.sourceforge.net

#4


引用 3 楼 ccdarkness 的回复:
处理png要用pngimage单元 
在这里: http://pngdelphi.sourceforge.net


加了也一样的,跟这个没关系。

#5


不信没人知道~
加分100~~~

#6


上班了,应该有人来了吧,再up~

#7


http://www.delphifans.com/SoftView/SoftView_2496.html

看这个 使用其中的TPngSpeedButton 即可

#8


下载一个支持png的开发包 。
http://pngdelphi.sourceforge.net/pngimage143.zip

效果和代码参考
http://borland.mblogger.cn/jinjazz/posts/21093.aspx

#9


不好意思,没有注意你的问题

#10


这位大叔的文章可能会对你有帮助
http://blog.csdn.net/maozefa/archive/2007/07/12/1685930.aspx

#11


谢谢楼上,那位大叔的文章看了,问题依旧

#12


你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。

#13


弱弱的问一句,楼上大叔今年五十几了?

#14


56了,哈哈

#15


引用 12 楼 maozefa 的回复:
你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。


我测试了一下,
GPImage := TGPImage.Create(istreamTest); 这一句在脱离ide运行时确实没有报错,
但在执行Graphic.DrawImage(GPImage, 0, 0); 这句时报错。。。

#16


下载个PNG类就可以用了,
下载地址
http://download.csdn.net/source/226243

使用

uses
pngimage;
var
  filename : string;
    Bitmap : TBitmap;
    PNG:   TPNGObject;
begin
PNG := TPNGObject.Create;
          Bitmap := TBitmap.Create;
          try
                   PNG.LoadFromFile(filename);
                  Bitmap.Assign(PNG);
          finally
                  PNG.Free;
          end;
end

#17



uses
pngimage;
var
  filename : string;
    gif : TGIFImage;
    PNG:   TPNGObject;
begin
                    PNG := TPNGObject.Create;
          Bitmap := TBitmap.Create;
          try
                   PNG.LoadFromFile(filename);
                  gif.Assign(PNG);
          finally
                  PNG.Free;
          end;
end

#18


引用 15 楼 marry2000 的回复:
引用 12 楼 maozefa 的回复:
你说的这个问题可能是GDI+内部的一点小BUG,就是使用文件流加载PNG文件时会弹出CPU调试对话框,这个问题对你的程序没有影响,脱离Delphi调试环境,运行会正常。 
 

我测试了一下, 
GPImage := TGPImage.Create(istreamTest); 这一句在脱离ide运行时确实没有报错, 
但在执行Graphic.DrawImage(GPImage, 0, 0); 这句时报错。。。 


我用你的代码(1楼)脱离ide运行,什么错误也没有,图片也能正确地显示在窗口左上角。

#19


真是头疼,
我在win2000系统的机子上测试,脱离ide运行,Graphic.DrawImage(GPImage, 0, 0);会报错,
在xp系统的机子测试,结果如楼上所说。没有报错,图片也能正确显示。

#20