◎ppmtodpp Ver. 0.04     1997.12.31

●これはなんですか?

SonyのデジタルカラープリンタDPP-M55はデジタルカメラDSC-F1の
画像データを印刷するためのプリンタですが、セントロニクス準拠の
プリンタ端子をパソコンにつないでパソコンからデータをプリントする
こともできます。

しかし、例によってプリンタドライバはWin95およびMac用しか提供されて
いません。日頃、主にX680x0を利用しているユーザにとって、印刷したい
データをWin95/Macの動いているマシンに転送してそこから印刷するという
状況は苦痛ともいえるでしょう。(^^)

そこで、X680x0からMatierとかを使って作った画像とかQV-100/QV-10の
画像なんかを直接プリントしたいな〜という要求に答えるのが
このフィルタプログラム ppmtodpp です。

#はたしてのこのプログラム使うX680x0ユーザって林以外に
#いるのだろうか。(^^;;

●作者
  林 謙一 xg2k-hys@asahi-net.or.jp

●注意
以下の事項に納得した方のみしか本ソフトウェアppmtodppを利用しては
いけません。

・本ソフトウェアを使用することによってDPP-M55が致命的破壊を
  被る可能性があります。
・本ソフトウェアを使用することによって生じる損害、不利益等に
  ついて、林は一切の責任を負いません。
・本ソフトウェアに付随する資料の内容によって生じる損害、不利益等
  について、林は一切の責任を負いません。
・本ソフトウェアを使用することによってDPP-M55が故障したとして
  もSonyさんに質問することは絶対にしないでください。
  (修理依頼するときはWindows/Mac版のプリンタドライバと印刷ソフト
   で現象を確認してからにしてください)
・印刷方法の調査は借りてきたWindows 95マシンにプリンタドライバを
  インストールし、そこでペイント.exeから印刷した結果を「ファイルに
  保存」したものに基づくものです。
・ppmtodppはいわゆるフリーソフトウェアです。
  使用に際しては特にフィーを請求しません。
  ただし、くる物は拒みません。(^^)

●中身
  ppmtodpp.doc Unixむけ説明(JIS)
  ppmtodpp.x68 この文章(S-JIS)
  ppmtodpp.c   ソース
  ppmtodpp.x   X680x0用バイナリ

●動作環境
・X68030 Human68k 3.02
  (X68000でも動くと思います)
  たぶん空きメモリが1.5Mぐらいないと動きません。

●コンパイル方法
gcc -o ppmtodpp ppmtodpp.c -DX68 -liocs
でコンパイルできます。-Oオプションとかはお好みでどうぞ。

●ppmtodppを使うために用意するもの
・Sony デジタルカラープリンタ DPP-M55
  (Cyber-shot Printerというニックネームがついてます。)
  (CVP-M55という類似品のビデオプリンタがありますが、これは
   ビデオ入力専用でセントロニクス準拠のプリンタ端子がありません。
   おまちがえなきよう)
・Sony ビデオプリントパック VPM-P50STA か VPM-P200STA
  「スタンダード」サイズのプリントパックを使ってください。
  ハガキ用、ステッカー用は試していないのでどうなるかわかりません。
  ハガキ用は長さが違うらしいのでだめだと思います。
・プリンタケーブル
  (DPP-M55のパッケージには入ってません。一般的なセントロニクス準拠の
   36pinコネクタにつなぐケーブルを用意してください。)
  (単純にD0〜D7、BUSY、STROBE、GNDのみがつながった単純なケーブルを
   使ってください、余計な結線があるとうまく動かないことがあります)

●ppmtodppの使い方
・usage
  ppmtodpp.x [opitons] ppmfile

  入力ファイル(ppmfile)を指定すると、DPP-M55への印刷データに変換
 してプリンタポートへ出力します。
  入力ファイルを指定しなかった場合は、標準入力からの入力になります。

 入力ファイルは幅480ドット以下高さ640ドット以下、もしくは、
 幅640ドット以下高さ480ドット以下、RGBそれぞれ8bitの
 PPM(RAW P6)フォーマットのみです。それ以外のファイルはうけつけません。
 また、480x640、640x480の大きさを越えるファイルもうけつけません。

 正しくDPP-M55が接続されていれば印刷がデータが転送された後、印刷が始
 まります。

 オプション
 -n          センタリング機能をoffします。
 -o filename プリンタへおくるYMCデータをfilenameに書き出します
             いったんファイルに書き出されたデータは
             copy data.prn LPT
             等としてLPTへコピーすると印刷されます。
 -r value    元データのR成分にγ補正をかけます。(0<暗<1.0<明)
 -g value    元データのG成分にγ補正をかけます。(0<暗<1.0<明)
 -b value    元データのB成分にγ補正をかけます。(0<暗<1.0<明)
 -y value    プリンタへ送るデータのY成分の最小値を指定します。(デフォルト30)
 -Y value    プリンタへ送るデータのY成分の最大値を指定します。(デフォルト204)
 -m value    プリンタへ送るデータのM成分の最小値を指定します。(デフォルト36)
 -M value    プリンタへ送るデータのM成分の最大値を指定します。(デフォルト218)
 -c value    プリンタへ送るデータのC成分の最小値を指定します。(デフォルト37)
 -C value    プリンタへ送るデータのC成分の最大値を指定します。(デフォルト225)
 -X          グラフィック画面(6万色モード)を印刷します。
 -v          データ変換の進展を標準エラー出力に表示します。
 -h          usageを出します。

●印刷でできるデータについて

現在、以下の条件を満たすデータだけが入力ファイルとして有効です
・幅480ドット以下 高さ640ドット以下 または
  幅640ドット以下 高さ480ドット以下
・階調はRGBそれぞれ8bitのいわゆる24bitデータ
・PPMフォーマットのRAWフォーマット(P6フォーマット)

  480x640ドット、640x480ドットより小さいデータは用紙の中央に
  位置するように印刷されます。-c オプションをつけると、この
  センタリング機能がoffされ、用紙のむかって右下角に寄せて
  画像が印刷されます。
  
  画像の長い辺が用紙の長い辺になるように印刷されます。
  (横長の画像は90度回転して印刷されます。)

  480x640ドット、640x480ドットより大きいデータは印刷されず、
  エラーになります。

●PPMフォーマットについて
X680x0しか使ったことのない方にはなじみがないかもしれませんね。
Unix系OSのフリーソフトnetpbm/pbmplusで扱われる標準フォーマットです。
P3形式とP6形式がありますが、ppmtodppではP6形式しか入力として扱えません。

PPMフォーマットのP6形式は以下のようなものです。
先頭にASCII文字で
P6\n
幅ドット数\n
高さドット数\n
255\n
の3行の文字列を書いた後ろに1ドットずつRGB3バイト
のデータをバイナリで続けたものです。
(厳密には\nはスペースやTABでもかまいませんし、
 '#'以降\nまではコメントになります。)

●PPMフォーマットの画像を作るには
netpbmをX680x0用に移植しましたので、とりあえずBMPやGIFからは
変換できます。また、djpeg/cjpegもX680x0用に移植しましたので、
JPEGからPPMへ変換することができます。
詳しくはそれぞれのREADMEを参照してください。
netpbm/djpeg/cjpegの入手先は最後にまとめてあります。

●RGBとYMC
ppmtodppは入力ファイルのデータをRGB(Red Green Blue)からYMC
(Yellow Magenda Cyan)に変換し、DPP-55M用のエスケープコード
を付加するだけの単純なプログラムです。単純に変換しているので
そのまま印刷した場合、色合い、明るさ等は画像をCRT画面に表示
したものと異なります。これを補正するには-r -g -bオプション、
および-Y -y -M -m -C -cオプションを使います。

ppmtodppでは入力ファイルの画像データをまずRGBでγ補正し、
その後、YMCデータに変換した後、YMC成分をそれぞれ適当な範囲で
正規化して印刷します。YMC成分を素直に0〜255にしないのは、
いろいろ試した結果、YMCそれぞれの色がきっちりと256階調では
印刷されず、濃度指定が、約210以上、および30以下の場合では
印刷結果がほとんど同じよう見えるためです。

 元データ(RGB 0〜255)→YMC変換(0〜255)→YMC正規化(30〜210程度)

-r -g -b オプションは元画像データのRGB成分をそれぞれγ補正します。
1.0を指定すると変化はありません。1.0以下の値を指定すると暗く、
1.0以上の値を指定すると明るく(白っぽく)なります。

例 全体的に明るくする
   ppmtodpp -r 1.2 -g 1.2 -b 1.2 picture.ppm
例 赤成分を少し弱く
   ppmtodpp -r 0.8 picture.ppm

注:RGBの調整は光の色の重ねあわせで考えてください

-y -m -c オプションは正規化の下限を、-Y -M -Cオプションは上限を
指定します

例 黄色成分を強めに
   ppmtodpp -Y 255 -y 80  picture.ppm
   (Y成分の上限、下限を引き上げて全体的に濃くする)

注:YMCの調整は絵の具の色の混ぜ合わせで考えてください

●デジタルカメラで撮った画像を印刷するには

netpbm/ppmplusや、djpegは手に入れておいたほうがいいでしょう。

例 qvplayで取り出したQV-10のJPEG画像を印刷
   djpeg picture.jpg | pnmscale -x 640 -y 480  | ppmtodpp

例 qvplayやchotplayで取り出したQV-100のFine画像やDSC-F1のJPEG画像を印刷
   djpeg picture.jpg | ppmtodpp

とにかく640x480のPPMファイルに変換して印刷するわけです。
それぞれの画像はカメラの癖がありますので途中でnetpbmのppmgamma等
を使って補正したほうがよりきれいに印刷することができます。

#ベストな調整パラメータがみつかったら林に教えてください(^^;

●X680x0のグラフィック画面を印刷するには

512x512 65535色モードしか対応していません。
グラフィック画面に画像したのち、
 ppmtodpp -X
で印刷されます。


●他にあると嬉しいフリーウェア/シェアウェア
 紹介しているURLは適当にarchieで探したものです。
 このドキュメントを読んでいる時にはすでに存在していない
 かも知れませんので、注意してください。
・JPEG.XあるいはJPEGED.XのJPEG画像表示ツール
 
  JPEG画像をX680x0で見るためには必要です。

・djpeg.x cjpeg.x
  (Independent JPEG Groupのjpegライブラリのサンプルとして入っています。
   X680x0用にコンパイルしてみました。)
 
  djpeg/cjpegのオリジナルのソースは下のxv-3.10aに附属しています。
 

・netpbm(ファイルフォーマット変換フィルタ集)
 (X680x0用にコンパイルしてみました。)
 
 オリジナルのソースはこちら
 

●今後の課題
・スケーリングはめんどくさいのでつけません。ppmscaleを使ってください。
・たぶんステッカーはそのまま使えると思います。ハガキはだめでしょう。
・ハガキは、まあ気が向いたらやってみます。
・バグレポート、改善要求は大歓迎です。
  (xg2k-hys@asahi-net.or.jpまでどうぞ)

●雑感
・印刷はわりと素直な仕様だったので簡単でした。
・QV-10で撮り貯めた画像を480x640に引き延ばして印刷
  して楽しんでます。さすがに絵は荒いですが、BJ-35vで印刷するのに
  比べれば圧倒的にきれいです。(^^)v
・X680x0のグラフィック画像を印刷する場合-r 0.7 -g 0.7 -b 0.7ぐらいで
  暗めにしたほうがいいみたい。(デフォルトだと白っぽくなります)
  ちょうどよいパラメータがみつかったら教えてください。

●歴史
96.11.4  ver 0.01 とりあえず出るバージョン
                  いろいろ出してみるとやはり薄い色、濃い色が
                  それぞれ白飛び、黒落ちしてるのが判明。
                  う〜ん、素直に0〜255の値ではいまいちなんだろうなぁ。
96.11.6           v(^^)v鹿島が勝った。あとは最終節も勝って優勝だぁ〜
                  と思ったら横F負けちゃったのね。ここであっさり当確
                  になってしまうとは…。
96.11.7  ver 0.02 自動センタリング、自動ローテート機能追加
                  引数にファイルをとれるようにした。

97.03.01 ver 0.03 RGBのγ補正機能、YMCの上限下限を指定できるように
                  した。
                  X680x0(Human68k)に対応
                  X680x0のグラフィック画面(15bit色モード)を直接印刷
                  できるようにした
                  写真とかだとけっこういい加減でもいいけどX68kのお
                  絵描き画像とかだと色の違いが気になるなあ。
                  
                  時はめぐり、97年の1stステージは鹿島優勝だが、2nd
                  ステージは磐田が優勝した。
                  なんと日本代表はWC98へ出場権を獲得した。
                  WGPではあいかわらずドゥーハンとビアッジが優勝し、
                  125ではイタリアの変な奴(をい)ロッシ君が優勝した。
                  林と言えば交通事故にあってエライ目にあった。
                  
97.12.30 ver 0.04 ver 0.03から半年以上たったが特に文句も動作報告も
                  こなかったのでリリースすることにする。(^^)


林謙一のホームページへ戻る