VC++で画像処理をしたいと思っています。
そこで、bmpファイルの全画素濃度を2次元配列に格納する処理ができれば、その他の画
像処理も可能になると考えています。
どなたか、「bmpファイルの全画素濃度を2次元配列に格納する処理」のやり方を教えて
いただけませんか??
画像処理で参考になるHPなどあれば教えていただきたいと思っています。
よろしくお願いします。
レスありがとうございます。
遅れましたが・・・・
【環境】
【環境】
windows XP / VC++
です。
VC++の環境で、画素濃度を取り出す関数として、
「GetPixel」関数という存在を知りました。
これの詳しい使い方など教えていただけませんか??
>教えていただけませんか
これじゃアドバイスのしようがないってば。
手取り足取り教えるわけには行かないし、
『やってみたら』
ぐらいしかいいようがない。
> 環境を書かないとクソwoodにいじめられると思われ。
環境を書くべきなのには同意だが、そういう言い方はイクナイ。
こういう掲示板はヒントを出す程度の物なので
見つけたのであれば、とりあえず自分で試してみてから
わからないところをピンポイントで質問してください。
このピンポイントでというのがミソです。
あまりに大雑把な質問だと解答が付く前に
質問内容に対する質問が延々と続いてしまって
なかなか本題に入れませんので。
あと、HELPを熟読するのは必須です。
HELPで足りないのであれば、参考書籍もそろえましょう。
全画素濃度とはなんですか?(どうやら濃度とは画像処理では当り前の言葉のようですが
それ以外の分野の人(個々に参加している人のかなりの割合)には意味がつかめないと
思えますので説明が必要かと思います
たくさんのアドバイスありがとうございます!
質問の仕方等々、すいませんでした。
もう少し自分で考えてみて、分からないところをピックアップした後ピンポイントで質
問できるようにしたいと思っています。
プログラムリスト50行くらいをアップして見てもらいたいのですが、そういうことを行
ってもいいのでしょうか??
50行は長いと思いますね。
以前やっちゃったことがありますがたぶん誰も読まなかったと思います;;
それと島さんもおっしゃってますが、専門分野の内側では当たり前の用語や事柄でも
部外者には何のことやらさっぱりというのが普通なので、
まず「全画素濃度」とは何かということを素人にでも分かるように説明した方がいい
です。私も「全画素濃度」が何なのか知らないです。
読みやすいコードなら50行位は良いのではないかと(私は)思います
要所を載せます。
<画像入力関数>
hp=header_buf;
fp=fopen(filename,rb); //バイナリモードでファイルオープン
if(fp==NULL)
{
printf(ファイルオープンエラー);
exit(1);
}
fread(header_buf,sizeof(unsigned char),54,fp); //ヘッダ情報読み込み
fread(pallet_buf,sizeof(unsigned char),1024,fp); //パレット情報読み込み
for(i=bmp_height-1;i>-1;i--) //画像データの読み込み
fread(input[i],bmp_width,1,fp);
<画像出力関数>
fp=fopen(filename,wb); //バイナリモードでファイルオープン
fwrite(header_buf,sizeof(unsigned char),54,fp); //ヘッダ情報書き込み
fwrite(pallet_buf,sizeof(unsigned char),1024,fp); //パレット情報書き込み
for(i=0;i<bmp_height;i++) //配列へ格納
{
for(j=0;j<bmp_width;j++)
{
output[i][j]=input[i][j];
}
}
for(i=bmp_height-1;i>-1;i--) //画像データの書き込み
fwrite(output[i],bmp_width,1,fp);
こんな感じで今やってます。
これではきだした出力ファイルが入力ファイルに比べ格段にサイズが減り描画できなく
なってしまいます。何かお気づきの点があったら指摘してください。
これってパレット読込時にヘッダ情報の解釈がされてないようですが、
これで本当に大丈夫なんでしょうか?
扱うファイルの条件は固定なんですか?
bmp_heightとbmp_widthの出所もわかりませんしねぇ。
画素子が必ず一バイトとは限りますまい。
この辺はきちんとヘッダ解釈しないとわからないはずですよ。
ファイルフォーマットの確認をきちんと行って
フォーマットを理解していないとこういう処理は出来ませんよ。
まだまだ、勉強不足のようです。
そこで、完成しているプログラムのソースなどをみて勉強したいと思い
>ここが参考になると思われ。
> http://www.sm.rim.or.jp/~shishido/
ここで、C++のBMPファイルの画像処理のプログラムを実行してみたのですが、
LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル _main は未解決です
Debug/Cpp1.exe : fatal error LNK1120: 外部参照 1 が未解決です。
↑のエラーが表示され実行できません。
どうしてか教えていただけませんか??