2012-01-14 6 views
5

」にタイプ「System.Drawing.Image」に変換できません。
選択した画像を配列に配置しました。は、暗黙のうちに画像がopenFileDialog</strong><strong>からそれを選択した後にパットされます</p> <pre><code>private Bitmap img1 = null; private Bitmap img2 = null; </code></pre> <p>たビットマップ宣言System.Drawing.Bitmap'`

imgName = openFD.FileNames; 

これらの画像を表示するには、button1をクリックします。

pictureBox1.Image = Image.FromFile(imgName[0]); 
pictureBox2.Image = Image.FromFile(imgName[1]); 

私はこの

img1 = Image.FromFile(imgName[0]); 
img2 = Image.FromFile(imgName[1]); 

でButton1のコードを交換しますが、エラーが

が暗黙のうちに 'System.Drawing.Bitmap' にタイプ 'System.Drawing.Image' に変換できませんが発生

私はコードをimg1 = Bitmap.FromFile(imgName[0]);に変更しようとしています。それでも同じエラーが発生します。
どのような修正や修正が必要ですか?

+1

ビットマップは常にイメージと見なされますが、イメージは必ずしもビットマップではありません。これは、他のタイプの画像に対する将来のサポートを提供します。したがって、イメージを強制的にビットマップにしないでください。 –

答えて

7
img1 = new Bitmap(imgName[0]); 
img2 = new Bitmap(imgName[1]); 
2
img1 = (Bitmap) Image.FromFile(imgName[0]); 
img2 = (Bitmap) Image.FromFile(imgName[1]); 

エラーメッセージは、暗黙のうちにあなたが明示的にI以下のコメントをもとに編集Bitmap

それをキャストする必要があり、このどちらかの示唆となるだろうを行うことはできません言うようにicktoofayの答え、すなわちビットマップコンストラクタを使用するか、ビットマップを使用する代わりに直接Imageクラスを使用できる場合は、そのことも可能です

+3

あなたは、あなたが望むものにキャストすることはできません。これはプログラミングであり、魔法ではありません。 'Bitmap'は' Image'から継承しますが、それ以外の方法はありません。つまり、 'Image'オブジェクトを暗黙的に' Bitmap'オブジェクトに変換することはできません。キャストはコンパイラにシャットダウンするように指示するだけで、問題は解決しません。 –

+0

ここで正しい方法は何でしょうか。ビットマップコンストラクタを使用するか、Imageクラスを直接使用しますか?アップロードされたファイルがビットマップであることが確実でない限り、Imageを使用するのが正しい方法だと思います。どう思いますか? –

+0

難しいです。 'Bitmap'が必要な場合は、おそらくコンストラクタを使って' Bitmap'クラスのインスタンスを作成する必要があります。さもなければ、あなたが割り当てている変数( 'img1'と' img2')を 'Image'クラスのオブジェクトとして宣言して、問題は解決します。ポイントは、キャストがまれに正解であることではないことです。コンパイラは潜在的な問題を警告しようとしています。その提案に留意する必要があります。 –

関連する問題

 関連する問題