2013-06-19 6 views
14

この質問は以前に尋ねられた(と答えた)ことを理解しています。しかし、いずれのソリューションも私のために働いていません。これは私の無能さ、ブードゥーな呪い、または私が紛失しているシンプルで明白な何らかの原因によるものかもしれません。以下はパスを使用してリソースファイルからPictureBoxイメージをロードする(パート3)

パズルのすべての関連する部分のスクリーンキャプチャです:

Screen capture http://dinosaur-island.com/PlantPictureBoxScreenCap.jpg

あなたはImagesフォルダにリソースとしてロードされた植物の多数のBMPがある見ることができるように。 "PlantPicture"という名前のピクチャボックスがあるフォームがあります。私は、鋳造、ロードのさまざまな方法を試してみた

  PicPath = PicPath+".bmp"; 

Screen capture http://dinosaur-island.com/PlantDebugger.jpg

、などなど:(私は、デバッガでそれを確認したので)私は良いパスを持って知っている文字列があり、

あなたが同情を取ってそれをもう一度発射すれば、私は助言に感謝します。ありがとう!

答えて

28

パスは、"Images\a.bmp"のようにする必要があります。 (先頭のスラッシュの欠如に注意してください、そしてスラッシュはバックスラッシュである。)その後、

とを:

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

は、私はちょうどそれを確認するために試みたが、それが動作します。これはあなたが持っている他の答えのほかに「常にコピーする」ことです。

+0

PicPath = "@Images \ None.bmp"(これは 'none'イメージの正しいパスです)...エラーが発生しました: "未処理のタイプ 'System .IO.FileNotFoundException 'System.Drawing.dllで発生しました。追加情報@Images \ None.bmp ... double-checked。None.bmpは、リソースとディスク上のフォルダの両方に存在します。' Images ' – zetar

+1

@zetar "@ "Images \ None.bmp"は間違っています@ "Images \ None.bmp"は正しいです。@は単に "\"の後ろにある "N"をエスケープする代わりに "\"を単にバックスラッシュとして扱うようにC#に指示します。 "\\"(二重バックスラッシュ) – ispiro

+0

GOT IT!が渡された文字列の@を削除しました! – zetar

2

「出力ディレクトリにコピーする」を「常にコピーする」または「新しい場合はコピーする」に設定すると役立ちます。

あなたのPicPathは、イメージのロード中にしばらくの間絶対パスに変換される相対パスです。 デバッグでPath.GetFullPath(PicPath)を使用すると、指定された場所に画像が表示されないことがほとんどあります。

+0

私はいつもコピー」に変更... Path.GetFullPath(PicPath)からの出力を「C:\\ Images \\ None.bmp」です。もちろん、私が望んでいたものではありません。しかし、私は実際には、ハードドライブから画像をロードしたくありません。これらの画像は、(私たちが何年も前に呼びかけた)「プリコンパイルされたインライン画像」として利用可能ではありませんか? – zetar

+0

はい。申し訳ありませんが/ ispiroが述べたように指導部を監督している。 – wonko79

9

[OK]を...ので、最初のあなたは)自分のプロジェクトに画像

1をインポートする必要があるフォームのデザイン

2でのPictureBoxを選択)オープンのPictureBoxタスク(それが右にpinted小さな矢印ですピクチャボックス上のエッジ)

3)をクリックして「画像を選択してください...」

4)第二の選択肢「プロジェクトのリソースファイル:」を選択します(このオプションは、あなたができる「資源」というフォルダが作成されますがProperties.Resourcesでアクセス)

5)インポートをクリックし、お使いのコンピュータから画像を選択(今と同じ名前を持つ画像のコピーは画像をステップ4で作成したリソースフォルダ)

6)[OK]をクリックして送信されますよう

イメージはプロジェクトにあり、プロパティコマンドで使用できます。

pictureBox1.Image = Properties.Resources.myimage; 

注:画像の名前を表すMYIMAGE ...リソースの後にドットを入力した後、あなたのオプションで、それはなりますインポートした画像ファイルを使用すると、ピクチャから画像を変更したいときだけ、このコードを入力

1

受け入れられる回答には大きな欠点があります。
画像をロードしてPictureBoxにの画像をロックすると、画像になります。その画像で今後操作を実行しようとすると、エラーメッセージが別のアプリケーションで使用されます。
このarticle show solution in VB

とこれは、それはあなたのファイルパスに依存C#実装

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

です。私にとって現在のディレクトリは[project]\bin\Debugだったので、親フォルダに2回移動しなければならなかった。

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

現在のディレクトリを検索するには、あなたがLABEL2と呼ばれるダミーのラベルを作成し、これを書くことができます。

this.label2.Text = System.IO.Directory.GetCurrentDirectory(); 
関連する問題