質問

Visual Studio 2008での作業。PNG画像に描画して、その画像を再度保存しようとしています。

次のことを行います:

private Image img = Image.FromFile("file.png");
private Graphics newGraphics;

そしてコンストラクター内:

newGraphics = Graphics.FromImage(img);

ソリューションを構築してもエラーは発生しません。実行しようとすると、次のようになります:

  

グラフィックスオブジェクトを作成できません   インデックス付きの画像から   ピクセル形式。

C#で画像を使用した経験はあまりありません。これはどういう意味ですか、どうすれば修正できますか?

編集:Visual Studioは、デバッグにより、画像のピクセル形式が format8bppindexed であることを通知します。

では、Graphicsクラスを使用できない場合、何を使用しますか?

EDIT2:を読んだ後これ、GDI +で作業するときはJPGファイルに固執する方が良いと仮定しても安全だと思いますか?

EDIT3:使用ステートメント:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Windows.Forms;
役に立ちましたか?

解決

インデックス付きPNGをサポートする優れたPNGライブラリがないと、明らかにGDI +グラフィックスオブジェクトはインデックス付き画像をサポートしないため、その画像に描画しようとしても運がありません。

インデックス付きPNGを使用する必要がない場合は、そのエラーをトラップし、サードパーティのユーティリティを使用して入力を通常のRGB PNGに変換できます。

編集:

このリンクを見つけました http:// fci-h.blogspot.com/2008/02/c-indexed-pixel-problem.html は、画像に描画する方法を提供しますが、元の画像には影響せず、保存できるコピーだけです()必要な場合。

リンクがダウンした場合:

Bitmap bm = (Bitmap) System.Drawing.Image.FromFile("Fci-h.jpg",true);
Bitmap tmp=new Bitmap (bm.Width ,bm.Height );
Graphics grPhoto = Graphics.FromImage(tmp);
grPhoto.DrawImage(bm, new Rectangle(0, 0, tmp.Width , tmp.Height ), 0, 0, tmp.Width , tmp.Height , GraphicsUnit.Pixel);

他のヒント

インデックス付き画像形式(PNG、GIFなど)からグラフィックを作成することはできません。 ビットマップを使用する必要があります(ファイルを作成するか、イメージをビットマップに変換します)。

Image img = Image.FromFile("file.png");
img = new Bitmap(img);
newGraphics = Graphics.FromImage(img);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top