白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
saki

白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#1

投稿記事 by saki » 11年前

白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?
(visual stdio 2005のC++でやっています。)
プログラムを書いていただけたら嬉しいです。
星の画像を使っています。幅256ピクセル、高さ256ピクセルです。
星の画像の二次元配列がどのようなプログラムで表示できるのかも分かりません。
よろしくお願いします。

アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#2

投稿記事 by usao » 11年前

何かの課題でしょうか?
あと,もうちょっと以下のような詳細がわかると良いと思います.

・BMP : どこに存在するのか.ファイルから読み込む?
      読み込むのだとしたらどういった手段で?
・白黒化 : 既に白黒化されたBMPがあるのか,この処理もプログラムで行う必要があるのか
・txt保存 : 具体的な保存フォーマットは? (要素間の区切りとか)
・二次元配列 : これは具体的に何のために必要?
・表示 : txtに保存することの他に,表示を行う必要があるということでしょうか.
      また,表示対象は何? 白黒化する前の絵? それとも,した後の絵?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#3

投稿記事 by みけCAT » 11年前

対象のBMPのフォーマットも教えてください。
2色?16色?256色?16ビット?24ビット?32ビット?全部?

※もちろん白黒の画像を24ビットで保存することも考えられますね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

saki

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#4

投稿記事 by saki » 11年前

usao さんが書きました:何かの課題でしょうか? はい。
あと,もうちょっと以下のような詳細がわかると良いと思います.

・BMP : どこに存在するのか.ファイルから読み込む?
      ・ペイントで作成したものを、ファイルから読み込みたいです。
      読み込むのだとしたらどういった手段で?
      ・プログラムで読み込みたいです。
・白黒化 : 既に白黒化されたBMPがあるのか,この処理もプログラムで行う必要があるのか
        ・題名の書き方がおかしかったです。すいません。 もともと白黒のBMPを使っています。
・txt保存 : 具体的な保存フォーマットは? (要素間の区切りとか)
       ・すいません。これはあまりわかりません。
・二次元配列 : これは具体的に何のために必要?
          この配列を使って、画像を表示するためだと思います。
・表示 : txtに保存することの他に,表示を行う必要があるということでしょうか.
      また,表示対象は何? 白黒化する前の絵? それとも,した後の絵?
      ・txtに保存してエクセルにその画像表示しろと言われています。
       


アバター
usao
記事: 1889
登録日時: 12年前
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#6

投稿記事 by usao » 11年前

整理すると, これは課題であって,

既に内容が白黒になっている24bitBMPを読込んで…
(A)何らかのフォーマットでテキストファイルに保存する.
(B)画像をエクセルに表示する.

という2つの事柄を行うプログラムをC++で作る という内容でしょうか.
((A)だけでなく(B)までをC++側でやる?)


現時点ではどこまでできていて,どのあたりが問題となっているのか について
示されるとよいと思います.
オフトピック
(B)の内容は私では力不足で無理なので,他の回答者様に期待…

saki

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#7

投稿記事 by saki » 11年前

整理するとそういうことになります。

今のところはあってるかどうかわからないんですが、このようなプログラムでしているのですが、エラーがでます。

#include<stdio.h>
#include<stdlib.h>

image_read(image,xsize,ysize,star)
unsigned char *image
int xsize;
int ysize;
char *star;
{
FILE*fp;

if((fp=fopen(star,"rb"))==NULL){
printf("ファイル・オープン・エラー\n");
exit(-1);
}
fread(image,xsize,ysize,fp);
fclose(fp);
}

image_write(image,xsize,ysize,star)
unsigned char *image
int xsize;
int ysize;
char *filename;
{
FILE*fp;

if((fp=fopen(star,"wb"))==NULL){
printf("ファイル・オープン・エラー\n");
exit(-1);
}
fread(image,xsize,ysize,fp);
fclose(fp);
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#8

投稿記事 by みけCAT » 11年前

コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。

まず、fopenでwbモードで開いているのに、そのファイルポインタでfreadをしているのはおかしいと思います。
変数imageの宣言でセミコロンが抜けています。
image_write関数の宣言で、第4引数の名前が矛盾しています。(そもそもなぜ古い書き方を使用しているのか?)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#9

投稿記事 by みけCAT » 11年前

saki さんが書きました:・txtに保存してエクセルにその画像表示しろと言われています。
「エクセルにその画像表示」とは、具体的にどのような処理ですか?
考えられる例
・プログラムでxlsxファイルを作成し、エクセルを起動してそれを読み込ませる
 ・セルを画像から読み込んだ白or黒で塗る
 ・画像を直接貼る
・プログラムでxlsファイルを作成し、エクセルを起動してそれを読み込ませる
 ・セルを画像から読み込んだ白or黒で塗る
 ・画像を直接貼る
・プログラムでエクセルを操作し、セルを画像から読み込んだ白or黒で塗っていく
・Microsoft Excelとは関係なく、プログラムがデータを保存したあと「エクセルにその画像」と表示する
・エクセル(問題集の書籍)に読み込んだ画像をプロジェクションマッピングする
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#10

投稿記事 by みけCAT » 11年前

とりあえずBMPのファイルフォーマットを解説しているサイトを貼っておきます。
プログラミング/BMPファイル仕様/バイナリ構造 - ルーチェ's Homepage

また、実際にBMPファイルをペイントなどで作成し、バイナリエディタで中身を見てみるのも勉強になります。
TSXBINというソフトを使えば、BMPファイルなどの構造をわかりやすく表示してくれます。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

saki

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#11

投稿記事 by saki » 11年前

確かにfreadはおかしいと思いました。
この場合どのようなプログラムにすればいいですか?


おそらくプログラムでxlsファイルを作成し、エクセルを起動してそれを読み込ませて画像を直接貼るだと思います。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 白黒化したBMPを二次元配列にして、.txtで保存したいのですがどうすればいいですか?

#12

投稿記事 by みけCAT » 11年前

●BMPを読み込むプログラム
BMPファイルをfopenでバイナリモードで開く
→ヘッダ部分を読み込む
→形式チェック(対応している形式か、どんなフォーマットか)
→画像データを読み込む
→2値化
→後のプログラムで扱いやすい形式に格納(hoge[width*y+x]形式の配列など)
→fclose

●2値化したデータを.txtで書き出すプログラム
書き込むtxtファイルをfopenでテキストモードで開く
→fprintfなどで2値化したデータをファイルに書き出す
→fclose

●2値化したデータをxlsファイルに埋め込んだ後、エクセルを起動してそれを読み込ませるプログラム
書き込むxlsファイルをfopenでバイナリモードで開く
→xls形式のデータを作成してfwriteなどでファイルに書き出す
→fclose
→system関数でエクセルを起動する

このような流れだと思います。
xlsファイルの作り方は難しそうなので、頑張って調べてください。
xmlファイルや画像ファイルをzipでまとめた形式であるxlsx形式の方が簡単そうだと思いますが、こちらではダメですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る