• 締切済み

bmpファイルの明暗について

**.bmp のファイル(白黒)があります この画像の明暗を 1pixel 単位で数値化したいのです  例えば 真っ白 = 0 真っ黒 = 255 また、そのデータを csv ファイル等に保存したいのですが 可能でしょうか? 宜しくお願いいたします

  • nao0
  • お礼率10% (50/483)

みんなの回答

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

お手軽なのは、オンラインソフトを利用する方法ですね。 BMP2CSV http://www.vector.co.jp/soft/win95/art/se108144.html 質問にある処理そのものは出来ないように見えますが、処理結果のcsvファイルを少し加工すれば問題なさそうです。 -- 個人的にお薦めなのは、BMPファイルをExcelのVBAマクロの Open Get で読み込み、逐次処理する手順です。 (Excelだと、ピクセル数が256までに制限されますが、csvの利用がExcelを前提?) 近藤正芳のウェブページ - BMP ファイルフォーマット http://www.kk.iij4u.or.jp/~kondo/bmp/

参考URL:
http://www.vector.co.jp/soft/win95/art/se108144.html

関連するQ&A

  • bmpファイルの明暗の数値化の方法

    A:\pctest.bmp ファイルを (1)取り込んで画面に表示 (2)1pixelの明暗を256段階のデータ(数値)に変換 する方法を教えて下さい 宜しくお願いいたします

  • csv形式からbmpを作成

    「bmp2csv」というソフトを使って、bmp形式の画像をモノクロで0,1 の2値データとしてcsv形式で保存しました。 この操作の逆で、csv形式のデータからbmp形式の画像を作成するにはどうしたらよいでしょうか。

  • BMPファイルを作成し保存

    教えてください。 環境:VB6 sp5 winXP sp2 行いたいこと(アウトプット):BMPファイルを作成して、HDDなどに保存したいです。 入力情報(インプット):VBコード内で配列としてピクセル情報を持っています。1000*1000の画像で、変数ImageData(1000000)の中に256階調でデータが入っています。 配列内のデータを元に1枚の画像(bmp形式)を作成これを保存したいです。 わかるかた、教えてください。 サンプルコードなどの場所などを添付していただければ幸いです。 よろしくお願いします。 質問の意味がわからなければ、お知らせください、追記します。

  • 4階調BMPファイルの構成

    こんにちわ。お世話になります。 WINDOWSのBMPファイルで白黒4階調のデーターは許されているのでしょうか? 存在するのであればデーター構成を教えていただけませんでしょうか。 よろしくお願いします。

  • bmpの種類

    こんにちは! お客さんからスキャニングしてbmpの画像で欲しいと言われました。その際2bitと16bitのbmp二種類で欲しいと言われたのですが意味がよく分かりません。2bitとは白黒のことと考えてよいのでしょうか?カラーでスキャンして2bitに保存しなおすと画像の大部分が消えてしまいます。どなたか教えて下さい。お願いします。

  • 名前をつけて保存するとBMPファイルになる

    名前をつけて画像を保存すると画像のデータがJPGだろうがGIFだろうがBMPにされて保存されてとても困ってます、

  • フォトショップでBMPファイルが開けない

    現在Phtoshop6.0を使っています。(WindowsXP) 主に、フリーソフトでキャプチャした画像を編集するのに使っています。 先日までjpegで保存していたのですが、新たにbmpで保存した画像の編集にもチャレンジしようと思い始めました。 ところが、bmpで保存した画像を開こうとすると 「<ファイル名>を開くことができません。ファイル形式モジュールでファイルの解析を実行できません。」 と出て開く事ができません。 何故なのでしょうか? 分かる方、教えて下さい。お願いします。

  • bmpよりpngのほうがファイルサイズが大きいです

    24bit per pixelの32×32の画像があるのですが, pngファイルの方が4312バイトで、bmpファイルの方が3128バイトと、圧縮しているpngファイルの方が bmpファイルより大きくなってしまっています.理由が分かりません. また、bmpファイルのサイズも単純に考えれば 32×32×3=3072バイトのはずですが、サイズが一致しないのはなぜでしょうか。 理由が分かる方教えてください。よろしくお願いします。

  • excel に bmpファイルを貼り付け

    excelファイルにbmpを貼り付けようと思っているのですが、 1bmpファイルが大き過ぎて困っています  どのようにすると小さくなるのでしょうか? bmpファイルは ペイントを用いて ファイルの種類:24ビット ビットマップ(*.bmp;*.dib) にて保存したものです

  • BMPファイルへの書き込みができない

    このプログラムは、左半分を黒、右半分を白の画像をBMPファイルに出力しようとしています。(出来ていません) プログラムの下に質問書いてます!お願いします! #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct{ char *filename; int x; int y; int width; int height; unsigned char data[80][100]; } BMP_DATA; static void WriteBmp(char *filename, BMP_DATA Image) { unsigned long Bmp_size;/*BMPファイルのサイズ*/ unsigned int Bmp_info_header_size;/*情報ヘッダのサイズ*/ unsigned int Bmp_header_size;/*ヘッダのサイズ*/ long Bmp_width;/*幅*/ long Bmp_height;/*高さ*/ unsigned short Bmp_planes;/*プレーン数*/ unsigned short Bmp_color;/*色 = 1[bit] (黒か白かだけ)*/ long Bmp_image_size;/*画像部分のサイズ*/ long Bmp_xppm;/*水平解像度*/ long Bmp_yppm;/*垂直解像度*/ int i,j; unsigned char Bmp_headbuf[54]; /*ヘッダ*/ unsigned char Bmp_Data[13]; FILE *Out = fopen(filename, "wb"); if(Out==NULL){ fclose(Out); exit(1); } /* ヘッダ情報の準備 */ Bmp_info_header_size = 40; Bmp_header_size = 54; Bmp_planes = 1; Bmp_color = 1; Bmp_image_size = Image.height * Image.width; Bmp_xppm = 0; Bmp_yppm = 0; Bmp_size = Bmp_image_size + Bmp_header_size; Bmp_headbuf[0] = 'B'; Bmp_headbuf[1] = 'M'; memcpy(Bmp_headbuf+2, &Bmp_size, sizeof(Bmp_size)); Bmp_headbuf[6] = 0; Bmp_headbuf[7] = 0; Bmp_headbuf[8] = 0; Bmp_headbuf[9] = 0; memcpy(Bmp_headbuf+10, &Bmp_header_size, sizeof(Bmp_header_size)); Bmp_headbuf[11] = 0; Bmp_headbuf[12] = 0; Bmp_headbuf[13] = 0; memcpy(Bmp_headbuf+14, &Bmp_info_header_size, sizeof(Bmp_info_header_size)); Bmp_headbuf[15] = 0; Bmp_headbuf[16] = 0; Bmp_headbuf[17] = 0; memcpy(Bmp_headbuf+18, &Image.width, sizeof(Bmp_width)); memcpy(Bmp_headbuf+22, &Image.height, sizeof(Bmp_height)); memcpy(Bmp_headbuf+26, &Bmp_planes, sizeof(Bmp_planes)); memcpy(Bmp_headbuf+28, &Bmp_color, sizeof(Bmp_color)); memcpy(Bmp_headbuf+34, &Bmp_image_size, sizeof(Bmp_image_size)); memcpy(Bmp_headbuf+38, &Bmp_xppm, sizeof(Bmp_xppm)); memcpy(Bmp_headbuf+42, &Bmp_yppm, sizeof(Bmp_yppm)); Bmp_headbuf[46] = 0; Bmp_headbuf[47] = 0; Bmp_headbuf[48] = 0; Bmp_headbuf[49] = 0; Bmp_headbuf[50] = 0; Bmp_headbuf[51] = 0; Bmp_headbuf[52] = 0; Bmp_headbuf[53] = 0; /* ヘッダ情報書き出し */ fwrite(Bmp_headbuf, sizeof(unsigned char), Bmp_header_size, Out); /* 画像データ書き出し */ for(i=0;i<13;i++) Bmp_Data[i] = 0; for(i=0; i<Image.height; i++){ for(j=0; j<Image.width; j++){ int index = j/8; if(j%8 == 0){ Bmp_Data[index] = Image.data[i][j ] * 128 + Image.data[i][j+1] * 64 + Image.data[i][j+2] * 32 + Image.data[i][j+3] * 16 + Image.data[i][j+4] * 8 + Image.data[i][j+5] * 4 + Image.data[i][j+6] * 2 + Image.data[i][j+7]; } } Bmp_Data[12] = (Bmp_Data[12] & 0xf0); fwrite(Bmp_Data, sizeof(unsigned char), 20, Out); /* ○ */ } fclose(Out); } int main() { BMP_DATA Image; int line = 0; int i,j; Image.x = 0; Image.y = 0; Image.width = 100; Image.height = 80; if(line == 0){ for(i=0; i<Image.height; i++){ for(j=0; j<Image.width; j++){ Image.data[i][j] = 1; } } } while(1){ /* BMPファイルデータを編集 */ for(j=0; j<Image.width; j++){ if(j < 50){ Image.data[line][j] = 0;//black }else{ Image.data[line][j] = 1;//white } } /* すべての列を編集したら、再描画する */ if(line == 63){ /* BMPファイルに書込む */ WriteBmp("display.bmp", Image); break; } line++; } return 0; } 以下の条件で、BMPファイルへ書き込もうとしています ・色の深さ1(黒か白) ・画像のピクセルサイズ(横100×縦80) fwrite関数で1列ずつ書き込もうとしているのですが、 この関数は1バイトずつしか書き込めないみたいで、100ビット書き込もうと思うと、 最低でも104ビット書き込まなくてはならない状況になります。 まず、この4ビットはどう処理すればいいのでしょうか?? あと、display.bmpのファイルがある状態で、プログラムを実行するとちゃんと動くのですが、 プログラム中の○のところのfwrite関数の第三引数を13にすると、BMPファイルが壊れて閲覧できなくなります。(ある程度大きい数字だと、BMPファイルは壊れないのですが、ぐちゃぐちゃの絵になります) その理由もわかりません。 汚い文章&プログラムですが よろしくお願いします><

専門家に質問してみよう