質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

3回答

20998閲覧

画像を表示する方法の疑問

unirou2

総合スコア37

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2016/05/12 16:54

今ゲームを作っています。
Pictureboxの中に座標を指定していろんな画像を表示させたいのですが、
フォルダーのパスで読み込む画像を指定すると、自分PCでは動くけど、他人のPCにダウンロードして実行すると
動かなくなると思うのですが、何か良い方法はありませんか?

//using System.Drawing; //描画先とするImageオブジェクトを作成する Bitmap canvas = new Bitmap(PictureBox1.Width, PictureBox1.Height); //ImageオブジェクトのGraphicsオブジェクトを作成する Graphics g = Graphics.FromImage(canvas); //画像ファイルを読み込んで、Imageオブジェクトとして取得する Image img = Image.FromFile(@"C:\test\1.bmp"); //画像をcanvasの座標(20, 10)の位置に描画する g.DrawImage(img, 20, 10, img.Width, img.Height); //Imageオブジェクトのリソースを解放する img.Dispose(); //Graphicsオブジェクトのリソースを解放する g.Dispose(); //PictureBox1に表示する PictureBox1.Image = canvas;

引用:
http://dobon.net/vb/dotnet/graphics/drawimage.html

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

リソースに埋め込む方法はすでに出ているので、別の方法を。

画像ファイルをプロジェクトに追加すると良いです。

「プロジェクト」メニューか、ソリューションエクスプローラーのプロジェクトを右クリックするかして、「新しいフォルダー」を追加してください。名前は仮にimagesとします。
プロジェクトに追加されたimagesフォルダーを右クリックして「追加」→「既存の項目」で目的の画像を指定してください。エクスローラーからドラッグ&ドロップでも追加できます。
追加された画像ファイルのプロパティに「出力ディレクトリにコピー」という設定項目があるので、「新しい場合はコピーする」を指定してください(常にコピーでも良いです)。

これで準備は整いました。ビルドすると、実行ファイル(EXEファイル)と同じフォルダーにimagesフォルダーが作られ、そこに画像ファイルがコピーされるようになります。
通常は実行ファイルの場所がカレントフォルダーとなるので、画像ファイルのパスはそこからの「相対パス」で指定するようにします。

C#

1Image img = Image.FromFile(@".\images\1.bmp");

これで、実行ファイルと一緒にimagesフォルダーもコピーすれば、どこでも動くようになります。ダウンロードさせたい場合は、それらをまとめてzipなどに固めると良いでしょう。
インストーラーは無理して作らなくても問題ありません。フリーウェアなどには適当なフォルダーに展開するだけというアプリも数多く存在します。

投稿2016/05/12 22:06

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unirou2

2016/05/13 12:19

回答ありがとうございます 詳しいやり方まで、教えていただき助かりました。 無事表示することもできました
guest

0

こんにちは。

ひとつはアプリケーションのリソースとして画像を埋め込んで使用すれば良いです。
以下などを参考にしてください。

http://dobon.net/vb/dotnet/programing/vsresource.html

もうひとつはインストーラーを使用して画像ファイルも配置するとかでしょうか。

投稿2016/05/12 17:43

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unirou2

2016/05/13 12:18

回答ありがとうございます いろんな方法があるんですね
guest

0

リソースに埋め込むという回答はもう出てますが、質問自体はパスに関することなのでその視点・考え方で回答します。

パスには相対パスと絶対パスというのがあります。
今お使いなのは絶対パスですね。
これだと環境に依存します。
相対パスは特定のフォルダからのパスになります。
PCが変わっても影響がないフォルダからの相対パスを指定するようにすればよいでしょう。
「PCが変わっても影響がないフォルダ」はどこかというと、実行モジュールがある場所ですね。
そこからの相対パスを使うようにしましょう。

それが出来てから一歩進んで、使用する画像は勝手に見られたくないとかなってきたら、前述のリソースに埋め込むなどの方法を使うと良いと思います。

投稿2016/05/12 23:46

ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unirou2

2016/05/13 12:22

回答ありがとうございます 相対パスと絶対パスがあるのですね 勉強になりました 今回は相対パスを使うようにします
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問