「なでしこv1」開発掲示板

なでしこv1のバグや要望を書き込む掲示板
[一覧へ] > (@628) [低] [未処理]
@628■ (#1987) pngが読めない? - eL (2012-04-26 21:17) /低 未処理
【症状】
イメージに表示したjpgをpng保存して、再度表示しようとすると
[エラー] vnako.nako(842): 関数『VCL_COMMAND』の実行中にエラーが起きました。Cannot load image. Invalid or unexpected PNG image format.(関数)
[エラー] vnako.nako(840): (関数定義)
[エラー] Aとはイメージ.nako.bak(8): (代入)
となりました。
【再現方法】
Aとはイメージ
これについて
  画像は「test.jpg」

3秒待つ

Aを「test2.png」に画像保存
Aの画像は「test2.png」

bmpに書き出し、読み込む場合はOKでした。

【バージョン】バージョン:1.5334
最終更新日:2012/04/22
OS   :Windows 7 [6.1(7601:2)]

(#1990) 現象が確認とおそらくは原因がわかりました - うぇいく (2012-04-28 09:52) /低 未処理
 現在、pngで保存しようとする(拡張子に.pngを指定する)と、実際にはBMP形式で保存されてしまうようです。保存されたtest2.pngをtest1.bmpにリネームすると、普通にBMPとして開けます。
どうも、1.5333からpng保存ができなくなってしまったようです。

------ 開発向け ----
おそらくは、Delphi2009のころは、PNGでの保存をDelphi本体の機能で行っていたものが、Delphi7にした際にサポートされなくなった(2009以降の機能)のが原因に見えます。
(GrachicExはドキュメントにあるようにSave機能は無いようですので、Saveの際にAsignしても基底クラスのSaveで動いていたっぽい気が)
おそらくは、LoadはGraphicExを使用して、SaveはPNGimageを使用する(RTLVersion<20.0)のと今の動作(RTLVersion>=20.0)に切り分けるのがよいのではと思います。
------------(vnako_funcion.pasの15ごろ)
{$IF RTLVersion >=15}
  ,XPMan
{$IFEND}
{$IF RTLVersion <20}
  ,pngimage
{$IFEND}
------------(vnako_function.pasの1500ごろ)
  procedure _png ;
  begin
    bmp.PixelFormat := pf24bit;
{$IF RTLVersion >=20}
    g := TPNGGraphic.Create;
{$ELSE}
    g := TPNGObject.Create;
{$IFEND}
  end;
------------

(#1987)へ返信する:

👆お手数ですが、いたずら防止のために、「真夏」の読み方を記入してください。

編集時に使うキーを入力(省略可能)

画像ファイル(最大300KB)を添付可能