• ベストアンサー

BMPファイルやJPEGファイルの解像度(pixcel/m)の意味

質問カテがあっているか心配ですが、画像ファイルの形式を読んでいて疑問になったので質問します。 BMPファイルのヘッダ部にある long biXPixPerMeter; long biYPixPerMeter; や、JPEGのAPP0セグメント(マーカーFFE0)の中にある  X-Resolution (2バイト、ビッグエンディアン)  Y-Resolution (2バイト、ビッグエンディアン) は、どのような意味があって、何に使うのでしょうか? プリンタにdip(dot per inch)がありますが、これと何か関係あるのですか? ご存知の方、ご教示お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • krisc
  • ベストアンサー率57% (12/21)
回答No.5

>これらの値はどのように利用するのものなのか、がわからないのです。 これらの値はWYSIWYGを実現する際に必要なものです。 出力デバイス(モニターやプリンタ)の解像度に応じて、画像を拡大または縮小することで、 20型モニターでも、40型モニターでも、プリンタでも、同じ大きさで表示・印刷が可能となるのです。 例えば、ピクセル数が378×756でPixelPerMeterが3780(=96dpi)ならば10cm×20cmですよね。 この画像を表示するとき、モニターが96ppiならば378×756で、モニターが144ppiならば567×1134で出力します。 すると、どちらのモニターでも画像が10cm×20cmで表示されます。 プリンタへの出力でも同様に行えば、画面に表示されたのと同じ大きさで印刷結果が得られます。

usatan2
質問者

お礼

明快な回答ありがとうございます。 出力デバイスの解像度(dpi)が分かれば、WYSIWYGが可能になりますね。 利用方法については納得できました!! 残るは、定義の出展、原著探しです。 引き続き、よろしくお願いいたします。

その他の回答 (4)

回答No.4

>  ・ ・ ・  同様に、画像ファイルにも原寸大という概念はないと思っていたのですが、規格としては印刷時の大きさを指定する項目がある、それがpixcel/meter という項目である、という解釈でよいのでしょうか?  概ねご推察の通りです。 撮影時カメラで画像の記録サイズを設定しますが、 いったん設定された画像サイズは Photoshop などのツールでは変更できません。 Photoshop などのツールで行う解像度設定は、 単に印刷用の解像度を設定しているに過ぎず、 カメラで記録した解像度に影響はありません。  印刷機の性能、 使用するプリントサイズをはるかに超える解像度をカメラ側で設定する等は、 メモリーの無駄です。

参考URL:
http://piro.sakura.ne.jp/pics/tips/p0011.html
usatan2
質問者

お礼

回答ありがとうございました。 >撮影時カメラで画像の記録サイズを設定しますが なるほど、そのような設定があるカメラがあるんですね。勉強になりました。 ご紹介いただいたページ拝見しました。私の解釈とは矛盾しない内容ですが、残念ながら、私の解釈の正当性を示してくれる内容では無かったようでした。 この解釈の原典、ご存知でしたら、今一度ご紹介ください。 「印刷時のPixcel/meter」といった記述があるとすっきりするんですけどね。

  • fifaile
  • ベストアンサー率25% (622/2403)
回答No.3

Photoshopしかわからないので恐縮ですが、お持ちでしょうか? 印刷オプションのところで、原寸大で印刷というものがあると思います。 これを使用して印刷してみてください。 同じピクセル数でも解像度で印刷サイズが変わるのがわかると思います。 印刷用紙で拡大縮小するのは、ソフトウェア側で画像の伸縮処理をしているからです。 その基準となっているのはこの解像度ですよ。

usatan2
質問者

補足

再度回答ありがとうございます。 印刷するときのPixcel/Meterということですね。つまり、画像ファイルに「原寸大」という印刷時の大きさが定義されている、ということですか?正確には、「印刷時の大きさを定義することができる」ということですか? それならば納得です!! でも、テレビで考えると同じ画素数でも20型のテレビで見るか、40型のテレビで見るかで大きさが変わりますよね。つまり、テレビの映像には「原寸大」という概念はないと思います。同様に、画像ファイルにも原寸大という概念はないと思っていたのですが、規格としては印刷時の大きさを指定する項目がある、それがpixcel/meter という項目である、という解釈でよいのでしょうか? 自分が使うだけでなく、このことを人に説明するので、この私の解釈が合っているとして、この解釈の原典、ご存知でしたらご紹介ください。 よろしくお願いいたします。

  • fifaile
  • ベストアンサー率25% (622/2403)
回答No.2

Pixcel/Meter は1メートルを表現するのに画素がいくつあるかという値 Dot/inch は一インチを印刷するのにいくつドットがあるかという値 例えば100px四方の画像があったとします。 ・10px/mであれば、この画像は10m四方 ・100px/mであれば、この画像は1m四方 ということになります。 例えば1インチの正方形があったとします。 ・10d/iであれば、このプリンタはこの正方形を100ドットで表現します ・100d/iであれば、このプリンタはこの正方形を10000ドットで表現します ということになります。 どちらも値が大きい方が高画質を表現できます。

usatan2
質問者

お礼

回答ありがとうございます。 pixcel/mは、印刷するときに決まる値ではないのでしょうか?すなわち、プリンタの場合には意味あると思いますが、画像ファイルであれば、A4に印刷する場合、サービス版のサイズで印刷する場合でpixcel/mは変化しますよね。これが印刷前のBMPファイルやJPEGファイルになぜ入っているのでしょうかというのが、私の疑問です。 これらの値はどのように利用するのものなのか、がわからないのです。

  • jo-zen
  • ベストアンサー率42% (848/1995)
回答No.1

以下のURLは参考になりませんか? http://www.nikonet.or.jp/spring/sanae/tips/dpi/dpi.htm

usatan2
質問者

お礼

回答ありがとうございます。 >以下のURLは参考になりませんか? 拝見しましたが残念ながら、参考になりませんでした。 ご紹介いただいたページは、pixcel/mではなく、総画素数の説明ですよね。 私の質問は、画像ファイルのpixcel/mに、どのような意味があって、何に使うのでしょうか?です。 再度のご回答、よろしくお願いいたします。

関連するQ&A

  • BMP画像ファイルを、JPEG あるいは GIF に変換するフリーソフトは?

    現在、ペイントで描いた絵(BMP画像ファイル)をJPEGファイルに変換するのに、フリーソフトの『BatchGOO』を利用しています。でも、9-最高画質にしても、輪郭や色が汚くなり困っています。バイト数は1/10くらいに減っているようです。 この手のBMPファイルをJPEGに変換するのはどうも良くないようですね。大体JPEGは写真などの画像に向いていて、イラストや絵などには向いていないようですね。 では、どうしてバイト数を減らしたらいいのでしょうか?投稿先がJPEGか、GIFファイルを受け付けているのです。それで、本題なのですが、BMPファイルのイラストや絵を、多少画質を落として(落とす必要がありますので)JPEGやGIFファイルに変換できるフリーソフトはないでしょうか?BatchGOO は GIF には変換できないみたいです。 御存じの方がおられれば、ご教授願えませんか?有料で購入すればいいのでしょうが、これくらいしか利用しませんので、できればフリーソフトがいいのですが・・・。よろしくお願いします。

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

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

  • 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ファイルは壊れないのですが、ぐちゃぐちゃの絵になります) その理由もわかりません。 汚い文章&プログラムですが よろしくお願いします><

  • BMP画像ファイルの構造について

    JavaでBMPファイルを読み出し、read()を使い1バイトごと読み出しました。使用した画像の大きさは,4x4のカラーデータです。 実行結果は、 66 77 102 0 0 0 0 0 0 0 54 0 0 0 40 0 0 0 4 0 0 0 4 0 0 0 1 0 24 0 0 0 0 0 48 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 65533 という結果が得られ、最初の54バイトがヘッダ情報で、残りが画像データというのは、分かるのですが、解析結果から、画像データのバイト数が48バイト(上記、65533の個数)であります。しかし、画像データ(BMPファイル)のもともとの大きさが4x4ということから結果として得られるバイト数は16バイトになると思うのですが、なぜ画像データの大きさが16バイトではなく48バイトなのでしょうか? 画像に詳しい方教えてください。できれば、参考サイトもあれば参考サイトも紹介していただきたい。

  • PhotoshopでJPEGを開こうとすると・・・

    PhotoshopでJPEGを開こうとすると「<ファイル名>は 開くことができませんでした。JPEGマーカーのセグメントが短すぎます。」と警告してきて、開くことができません。どうすればよいか教えてください。

    • 締切済み
    • Mac
  • Macで作成したデータをWinで見るには。。。

    Macで作ったファイル jpeg等を Winで開けないのでしょうか? フォトショップで立ち上げると 「JPEGマーカーセグメントが短すぎます(ファイルが完全でない場合があります)」 と警告が出ます。 Winで見るにはどうしたらいいでしょうか? Macについては全く分かりません。 よろしくお願いいたします。

  • JPEGデータをPhotoshopESPで開けません

    JPEGデータをPhotoshopESPで開こうとすると、「JPEGマーカーセグメントが短すぎます」(ファイルが完全でない場合があります)というメッセージがでて開けません。どうすれば開けるのか教えて下さい。パソコンはマックOS9です。

    • ベストアンサー
    • Mac
  • 画像ファイル(jpeg, tiff)からの数値取得

    画像ファイル(静止画でjpeg,bmpなど)から数値のデータを取得する方法としてirfanviewでその画像を読み取り、PNM形式で出力すればいいということがわかりました。 いけそうでいけてない状態になっています。ヘッダーはテキストで出ますが、データ部がテキストエディタで読めないみたいになっています。数値を取り出す方法を教えて頂きたいのですが。 類似の質問ですが、tiffファイルというものがあります。geotiffであり、地理情報が画像データの中に含まれているようですが、これを格子の並びデータとして取り出す方法も検討しています。GISソフトを使えばいいようなのですが、具体的な方法が不明なのですが。 以上、よろしくお願いします。

  • ftpでのネットワークバイトオーダーについて

    LinuxとUNIXのマシンでftpでファイルのやり取りをする場合、ftpのヘッダとデータ部分のネットワークバイトオーダーは、ビッグエンディアン or リトルエンディアンのどちらで行なっているのでしょうか? 参考になるURLや書籍等ありましたら教えて下さい。 TCP/IPは、ビッグエンディアンでヘッダ部分のやり取りを行なう。ということはネットでは見つかりましたが、ftpについては今の所、不明です。 申し訳ありませんが、どなたか教えて下さい。

  • フォトショップで開けません。

    自分で作った(?)画像を フォトショップで開こうとしたのですが、 「書類を開くことができません。JPEG マーカーセグメントが短すぎます(ファイルが 完全でない場合があります)。」 となり、開けません。 でも、これまでは普通に開いてました。 やった事といえば、大きさを720×520から 700×500に変更しただけです。 5個の画像を同じようにしたのですが、 その内の2個が開けません。 どなたか、お分かりになりませんか? お願いします。