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

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

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

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

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

Q&A

解決済

2回答

3323閲覧

Visual Studioでの画像ファイルの読み込み

tkphone343

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Visual Studio

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

0グッド

0クリップ

投稿2021/10/27 03:45

前提・実現したいこと

画像ファイルを読み込みたい

発生している問題・エラーメッセージ

読み込みたい画像ファイルをどのディレクトリに置けばいいのかわからない

該当のソースコード

画像ファイルを読み込む部分のソースコードです

#include<stdio.h> #include <stdlib.h> #include"pgmlib.h" void hough(int n); int main(void) { load_image(0, ""); //hough(0); return 0; }

試したこと

ソースコードのあるディレクトリなどに画像ファイルを置いてみたりしましたが、ファイル名を入力しても「その名前のファイルは存在しません」と表示されてしまいます

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

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

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

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

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

fana

2021/10/27 04:01

> 画像ファイルをどのディレクトリに置けばいいのか 発想が逆: 【「俺はここに画像ファイルを置くぜ!」っていうのを決めて,その場所から画像を読み込む形の実装を行う】 とすれば良いように思えます.
dodox86

2021/10/27 04:08

> ファイル名を入力しても「その名前のファイルは存在しません」と表示されてしまいます この状況が謎。タグに「Visual Studio」がありますが、Visual Studio 2019などでファイル名を入力したときのエラー表示ですか? どういうコンパイル(ビルド)をして、どのように実行しているかなど、詳細な状況を説明してください。
tkphone343

2021/10/27 05:09

ご教授いただいたようにカレントディレクトリを調べたところ、画像ファイルはカレントディレクトリには置かれていました。 このプログラムを実行すると入力ファイル名を尋ねてくるので、カレントディレクトリ内の画像ファイル名を入力すると読み込んでくれるはずなのですが、同名のファイルがないときと同じ表示になってしまいます。
jbpb0

2021/10/28 01:04 編集

> 入力ファイル名を尋ねてくるので、カレントディレクトリ内の画像ファイル名を入力すると読み込んでくれるはず 「load_image(0, "");」を「load_image(0, "hogehoge.jpg");」みたいに変えて、存在するファイル名をコード中に記入したら、正常に読めるのでしょうか? あるいは、「load_image(0, "c:\\aaa\\bbb\\hogehoge.jpg");」みたいに絶対パスで書いたら、どうでしょうか?
jbpb0

2021/10/28 01:32 編集

https://programming.pc-note.net/cpp/filestream.html の一番上に記載のコードで、「C:\\test.txt」を「test.txt」に変えてコンパイルして実行して、「test.txt」が作成される場所が、パス指定せずにファイル名だけで読み書きできる場所のはずです もしそれが、現在画像ファイルが置かれている場所と同じなら、 ・指定してる画像ファイル名が実際と違う ・「load_image()」の仕様(どこの場所からファイル読み込むかとか)が特殊 なのかもしれません 前者は、注意深く再度ファイル名を確認して実行してみてください それでもダメなら、後者かもしれないので、「load_image(0, "hogehoge.jpg");」みたいに存在するファイル名をコード中に記入してファイル読み込めるかを確認してみてください それでも読めないなら、「load_image()」が何かおかしい
jbpb0

2021/10/28 01:43 編集

> 「pgmlib.h」って、 https://www.asakura.co.jp/detail.php?book_code=12206 のですか? 上記がYesと仮定して、以下を書きます そうではないなら、スルーしてください 上記Webページから「サンプルプログラム」を落として展開し、その中の「pgmlib.h」を使って質問のコードをVisual Studioでコンパイルし、できたexeをコマンドプロンプトで実行してみました 実行前に、exeがあるパスに「cd」してます まず、画像ファイルがそこに無い場合は、下記のようになりました (行頭の「>」は、実際には表示されてません) > 入力ファイル名 (*.pgm) : aaa.pgm > その名前のファイルは存在しません. ファイル無いのだから、当然ですよね 次に、サイズが0の空っぽの「aaa.pgm」というファイルを、exeと同じ場所に置きました > 入力ファイル名 (*.pgm) : aaa.pgm > ファイルのフォーマットが P5 とは異なります. ファイルは読み込まれてますね 同様に、サイズが0の「aaa.jpg」というファイルが、exeと同じ場所にある場合 > 入力ファイル名 (*.pgm) : aaa.jpg > ファイルのフォーマットが P5 とは異なります. pgmファイルじゃなくても、読み込まれてますね 「pgmlib.h」がその書籍のものならば、カレントディレクトリに画像ファイルがあれば、(画像ファイルの形式によらず)読み込んではくれるので、 > その名前のファイルは存在しません. とはならないはずです
tkphone343

2021/10/29 04:12

詳細な回答ありがとうございます。 参考にしている書籍やpgmlib.hに関しては記載されているものであってます。 Visual Studioを使用する前に、テキストエディタで作成したソースコードをコマンドプロンプトでコンパイルして実行していたのですが、別の箇所でエラーは出ていたもののpgm画像の読み込みはできていました。 >https://programming.pc-note.net/cpp/filestream.htmlの一番上に記載のコードで の部分を試そうとしたのですが、よくわからなかったのでコード中にファイル名を入力する方法を試してみたのですが結果は同じでした。
fana

2021/10/29 04:21

> コード中にファイル名を入力する方法を試してみたのですが結果は同じでした。 (1) 何か適当に fopen 等を用いて既存ファイルから数バイト読み出すような処理を書き, (2) その「ファイル名」を示す文字列をそのまま(1)に与えてみる ということをしたらどうなるのでしょう? * (1) がまともに動作するのであれば,「ファイル名」を示す文字列自体は(一般的なパスの記述としては)妥当であると判断できるのではないでしょうか. →その場合,その load_image() とかいう関数の仕様が謎ということで,中身がわからない外野には回答不能である気がします. * (1) でも失敗するのであれば,「ファイル名」の与え方等が間違っているということだと判断できるでしょう.
jbpb0

2021/10/29 05:27

> >https://programming.pc-note.net/cpp/filestream.htmlの一番上に記載のコードで > の部分を試そうとしたのですが、よくわからなかった 質問に掲載されてるコードの代わりに、上記WebページのコードをVisual Studioにコピペして、コード中の下記だけ変更して、ビルドして実行するだけなのですが const char *fileName = "C:\\test.txt"; ↓ 修正 const char *fileName = "test.txt"; 特別なライブラリとかは使ってないので、Visual Studioの設定はそのままでビルドできると思う
guest

回答2

0

自己解決

長らく返信ができておらず申し訳ございません。

自分のVisual Studioの環境ではpgmlib.hのコードの中のscanfなどでエラーコードのc4996が出ていたのでそれを自分で書き換えていたのですが、そのせいでエラーが起きていたと思われます。

書き換えるのではなくVisual Studioのsdlチェックを「いいえ」にすることで、pgmlib.hをそのままエラーなく使用できるようになり、画像を読み込むことができました。

いろいろとご教授くださった方々、本当にありがとうございました。

投稿2021/11/18 04:45

tkphone343

総合スコア6

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

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

0

dosコマンドプロンプトで実行する場合は、
この実行ファイル(・・・・.exe)の存在するフォルダにあるものとしてopenします。

フォルダ名も指定する場合は、\フォルダ名.....\ファイル名なら、ルートディレクトリからのフォルダです。
フォルダ名.....\ファイル名なら実行ファイル(・・・・.exe)の存在するフォルダの下にあるフォルダ名.....\ファイル名をopenします。

VSのデバッグ操作で実行する場合は、Debug, Releaseフォルダ置いてください。

注. 指摘により修正します。  ... Debug, Releaseフォルダとは限らない場合もあるようです。

投稿2021/10/27 07:53

編集2021/10/27 11:04
yu-ima

総合スコア249

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

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

dodox86

2021/10/27 10:42

本筋でない部分であまり細かいことを指摘したくはないですが、「DOSプロンプト」とはWindows 98...Windows Meまでのもので、今のWindows NTベースのものに付属のものは、CMD.EXEの「コマンドプロンプト」ですね。完全に別物で、「DOSプロンプト」とか「DOS窓」とは呼びません。 また、 > VSのデバッグ操作で実行する場合は、Debug, Releaseフォルダ置いてください。 Visual Studioのデバッグ操作時、既定ではプロジェクトのディレクトリがカレントディレクトリになるので、DebugやReleaseフォルダーにファイルを置いても認識できない場合があります。設定次第です。※Visual Studio にもいろいろあるので、質問者さんが言うVisual Studio が一致しているとも限らないのですけどね。
Zuishin

2021/10/27 10:51

Debug, Release フォルダに直接置いた場合、ソリューションのクリーンなどで削除されることがあるので、ソリューションエクスプローラーでビルドアクションを指定します。
Zuishin

2021/10/27 11:33

> VSのデバッグ操作で実行する場合は、Debug, Releaseフォルダ置いてください。 > 注. 指摘により修正します。  ... Debug, Releaseフォルダとは限らない場合もあるようです。 この二行には何の情報も入っていないので丸々要りません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問