web-dev-qa-db-ja.com

パスを使用してリソースファイルからPictureBoxイメージを読み込む(パート3)

この質問は以前に尋ねられ(そして答えられた)ことを理解しています。しかし、私にとっては解決策はありません。

以下は、パズルのすべての関連部分のスクリーンキャプチャです。

スクリーンキャプチャhttp://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

ご覧のとおり、画像フォルダーにリソースとして読み込まれた植物のビットマップが多数あります。 「PlantPicture」という名前のピクチャーボックスを持つフォームがあります。文字列がありますが、私はそれが良いパスを持っていることを知っています(デバッガでチェックしたので):

            PicPath = PicPath+".bmp";

スクリーンキャプチャhttp://dinosaur-island.com/PlantDebugger.jpg

読み込み、キャストなど、さまざまな方法を試しました。

21
zetar

パスは次のようなものでなければなりません:"Images\a.bmp"。 (先頭のスラッシュがないことに注意してください。スラッシュはbackスラッシュです。)

その後:

pictureBox1.Image = Image.FromFile(@"Images\a.bmp");

私はそれを確かめるためにそれを試しました、そしてそれは動作します。これは、あなたが得た他の答えに加えて-「常にコピー」することです。

42
ispiro

わかりました...最初に、プロジェクトに画像をインポートする必要があります

1)フォームデザインでピクチャボックスを選択します

2)PictureBoxタスクを開きます(PictureboxのEdgeで右に固定された小さな矢印です)

3)「画像を選択...」をクリックします

4)2番目のオプション「Project resource file:」を選択します(このオプションは、Properties.Resourcesにアクセスできる「Resources」というフォルダーを作成します)

5)インポートをクリックして、コンピューターから画像を選択します(画像と同じ名前の画像のコピーがステップ4で作成されたリソースフォルダーに送信されます)

6)[OK]をクリックします

これで画像がプロジェクトに追加され、Propertiesコマンドで使用できるようになりました。pictureboxから画像を変更する場合は、次のコードを入力してください。

pictureBox1.Image = Properties.Resources.myimage;

注:myimageは、リソースの後にドットを入力した後、イメージの名前を表します。オプションでは、インポートされたイメージファイルになります。

12
Alin Leon

ファイルパスに依存します。私にとって、現在のディレクトリは[project]\bin\Debugなので、親フォルダに2回移動する必要がありました。

Image image = Image.FromFile(@"..\..\Pictures\"+text+".png");
this.pictureBox1.Image = image;

現在のディレクトリを見つけるには、label2と呼ばれるダミーラベルを作成し、次のように記述します。

this.label2.Text = System.IO.Directory.GetCurrentDirectory();
6
chenjesu

[出力ディレクトリにコピー]を[常にコピー]または[新しい場合にコピー]に設定すると便利です。

PicPathは相対パスであり、画像の読み込み中にある時点で絶対パスに変換されます。ほとんどの場合、デバッグでPath.GetFullPath(PicPath)を使用すると、指定した場所に画像がないことがわかります。

3
user1064248

受け入れられた答えには大きな欠点があります!
PictureBoxがその方法で画像をロードした場合、PictureBoxは画像をlockロックするため、その画像に対して今後の操作を行おうとすると、別のアプリケーションで使用されているエラーメッセージイメージが表示されます!
これ VBでの記事の解決策

そしてこれはC#の実装です

 FileStream fs = new System.IO.FileStream(@"Images\a.bmp", FileMode.Open, FileAccess.Read);
  pictureBox1.Image = Image.FromStream(fs);
  fs.Close();
2
Samy Massoud