
		Canon BJC-600J用デバイスドライバ (for gs261)

	CanonのカラーバブルジェットプリンタBJC-600Jのためのドライバで
	す。gdevcdj.cをベースにしているため、中間調を使用する絵などの
	印刷では、FS ディザリングによる美しい印刷結果を得ることができ
	ます。

	Driver Ver. 0.9 (960620)
	Document Date	(960622)

○旧版からの変更点

  1. ラスターイメージコマンドを使用。
  2. ESC/P コマンドは廃止(いずれ復活するかも)。
  3. モノクロ印字時に7色中から好きな色を選んで印字できる。
  4. CMYK に色分解して印字できる。
  5. 180dpi 印字に対応。
  6. マージンを調整。


○キットに含まれているもの

  gdevcdj.dif	- gdevcdj.cを BJC-600J対応にするためのパッチ。
  devsmak.dif	- BJC-600J対応でコンパイルするために devs.mak等に当て
		  るパッチ。
  cmds.doc	- ラスターイメージコマンド解析結果のドキュメント
  gamma*.ps	- γ補正のためのPSファイル
  mirrorA4.ps	- 鏡像印刷のためのPSファイル
  paramod.c	- BJC-600Jコマンドの調整/テストのためのツール
  bjc600j.jis	- このファイル。


○コンパイルに必要なもの

  ghostscript 2.6.1 のソースとバグフィクスパッチ。
  必要に応じて、日本語対応パッチ(なくても良い)。


○作り方

  0. ソースを展開し、日本語パッチなどを必要に応じて当て、make できると
     ころまで用意する。詳しい方法は make.doc や、日本語パッチを当てる
     場合には gs261j.jis を参照して下さい。

     メイクファイルは、ANSI コンパイラ用のものを使って下さい。
     UNIXならば、unix-{gcc,ansi}.mak を使用します。

  1. devs.mak(または使用するメイクファイル)に devsmak.difを当てる。

     patch -s < devsmak.dif

     とするとファイル名を聞いてくるので、パッチを当てるファイルを指定
     します。devs.mak に当てた場合には、tar_cat スクリプトを使ってメイ
     クファイルを作り直します。

  2. BJC-600Jドライバのためのパッチを当てる。

     patch -s < gdevcdj.patch

     このパッチには、とよだ＠福井大学さんによる DJ505J用のパッチも含ま
     れています。

  3. DEVICE_DEVS の定義にbjc600j.dev、bjc600jc.devを加える。

     例えば、メイクファイルの DEVICE_DEVS=x11.dev の行の後に

     DEVICE_DEVS2=bjc600j.dev bjc600jc.dev

     などの行を加えます。

  4. あとは、通常通りmakeして下さい。
     (コンパイラは、ANSI 準拠のものをお使い下さい。)


  なお、BJC600J用のデバイスは gdevcdj.c がサポートする他のデバイスとは
  干渉しないので、必要であればすべてのデバイスが使えるはずです。


○使い方

  gdevcdj.c がサポートする他のドライバと同様ですが、デフォルトでは、 
  bjc600j は256階調のグレイスケール、bjc600jc は 24bitカラーをCMYK 4色
  でディザリングするドライバです。

  プリンタの設定で、CR での印字指令はOFF、CRの機能は CR(LFしない) に設
  定して下さい。

  使用できるプリンタ・プロパティーは以下の通りです。

	BitsPerPixel	1, 3, 8, 16, 24, 32
	    24を指定した時は、K(黒インク) を使わない印字になり、色分解
	    したい時に便利です。
	    1、8 の時はモノクロ印字となります。
	    1、3 の場合、ドライバ側ではディザーを掛けません。
	    (3のときは、中間色が変な色になりますが、gsの仕様です。)

	BJblackemphasis	0: normal, 1: black emphasis
	    黒強調印字

	BJdraft	0: normal, 1: draft
	    HS モードで印字します。ドットを間引くため、高速ですが、色
	    調が変わります。

	BJcolor		0: Transparent
			1: M, 2: C, 4: Y, 7: K (3:Br 5:Rd 6:Gr)
	    0 のときは、元の色。それ以外の時は、
		カラー印字時	指定した色成分を印字。ただし、
				BJcolor >= 8 のときは BJcolor & 7 の色
				成分を黒で印字。
		モノクロ印字時	指定した色で印字。

	BJthickness	0: normal, 1: thick paper
	    厚紙指定

	BJpaperkind	0: normal, 1: coated paper, 2: OHP, 3: BPF
	    用紙指定
	    高品位の印字をしたい場合は、1か3を指定。(1と3の違いは不明)

  解像度のデフォルトは 360dpi ですが、180dpi で印字することもできます。
  180dpi で印字するためには、オプション、

       -r180

  を指定して下さい。
    現在のところ、該当するコマンドが見つからないため、縦横異なる解像度
  での印字はできません。

  このドライバは、デフォルトでディザリングをドライバ側で処理しますが、
  この処理はかなり時間がかかるため、試し刷りの場合などは 
  -dBitsPerPixel=3(モノクロの場合は 1 で良い) を指定すると、処理時間や
  データ量の節約になります。


使用例:

    CMYの3色分解をする時には -dBitsPerPixel=24 を指定すること。
    時間が惜しい時には -dBitsPerPixel=1または3 を指定する。
    ドラフト印字で良ければ、-dBJdraft=1 を指定する。

  カラーの絵を最高の品質で印刷する時 (4分割印字)
  gs -q -dNOPAUSE -sDEVICE=bjc600jc -sOutputFile=tiger.bj \
	-dBJpaperkind=1 tiger.ps quit.ps

  グレイスケールの絵を印刷する時
  gs -q -dNOPAUSE -sDEVICE=bjc600j -sOutputFile=golfer.bj golfer.ps quit.ps

  グレイスケールの絵を緑色で印刷する時
  gs -q -dNOPAUSE -sDEVICE=bjc600j -dBJcolor=6 \
	-sOutputFile=golfer.bj golfer.ps quit.ps

  テキストなど、中間調が必要ない時
  gs -q -dNOPAUSE -sDEVICE=bjc600j -dBitsPerPixel=1 \
	-sOutputFile=txt.bj txt.ps quit.ps

  カラーの絵のY成分とM成分のみを印刷する時
  gs -q -dNOPAUSE -sDEVICE=bjc600jc -dBitsPerPixel=24 -dBJcolor=5 \
	-sOutputFile=colorcir.bj colorcir.ps quit.ps

  カラーの絵のY成分を黒で印刷する時
  gs -q -dNOPAUSE -sDEVICE=bjc600jc -dBitsPerPixel=24 \
	-dBJcolor=12 -sOutputFile=colorcir.bj colorcir.ps quit.ps

  とにかく速く出力したい時
  gs -q -dNOPAUSE -sDEVICE=bjc600j -dBitsPerPixel=1 -dBJdraft -r180 \
	-sOutputFile=txt.bj txt.ps quit.ps


  各デバイスにおけるオプションのデフォルトは次の通りです。

	     bjc600j  bjc600jc
  紙サイズ:	  A4	    A4	(ただし、-DA4 でコンパイルした時)
  BitsPerPixel:	   8	    32
  BJblackemphasis  0	     0
  BJdraft	   0	     0
  BJcolor	   0	     0
  BJthickness	   0	     0
  BJpaperkind	   0	     0
  解像度	 360dpi    360dpi


○現在のところ、次のような制限があります。

  1. BJC-600J 以外のプリンタでは動作しないでしょう。
     (欧米仕様の BJC-600 での動作は未確認です)

  2. A4 サイズしかテストされていません。
     一応 A4 以外のサイズにも対応するようコーディングしていますが、試
     していません。また、今のところマージンがすべて A4 と同一になって
     います。

  3. PC-9801 のプリンタポートのダイレクトアクセスはサポートしていません。
     (もともと、gdevcdj.c にはそういう対応がなされていないので、、、)


○ラスターイメージコマンドについて

  ラスターイメージコマンドを使うことによる、ESC/Pコマンドに対する利点
  は次の点です。

  1. コマンドで用紙の種類を設定できる。

    普通紙、コート紙、OHP、BPFといった種類を指定することができます。指
    定によって印字方法が変わり、

    普通紙:	双方向 2分割印字
    コート紙:	片方向 4分割印字
    OHP:	双方向 4分割印字
    BPF:	片方向 4分割印字

    という具合になるようです。コート紙/BPF の時がもっとも高品位な印字
    が期待でき、ヘッドの移動による筋がほとんど見えなくなります。
    (コート紙とBPFとでどう違うかは不明)

	n分割印字とは、一行の印字が 1/n の濃度で行われ、かつ改行が
	ヘッドの高さの約 1/n ずつ行われる印字のことです。当然、通
	常の印字のn倍の時間がかかりますが、ヘッドの跡が目立たなく
	なります。

	ESC/Pモード時は、HQ2やCPモードにして分割印字していても、改
	行幅は常にヘッドの高さ分ありオーバーラップさせた印字を行わ
	ないため、どうしてもヘッドの跡が目立ちました。また、カラー
	で分割印字をさせると色毎にヘッドが動いてしまうようで、非常
	に印字時間がかかりました。(ESC/Pモードのバグ?)

  2. データの圧縮により転送時間の軽減が期待される。

    1次元のrun-length圧縮を行うので、データの転送量が少なくなることが
    期待できます。BJC-600Jは Deskjet シリーズと比べ、コマンドが冗長な
    ので思ったほどの効果は出ませんが、ESC/P よりは、サイズを抑えること
    が可能です。

  3. 処理の高速化
    シリアルプリンタの場合、普通は、ラスターイメージを縦方向の配列に並
    べ替えるという大変重い処理が必要なのですが、ラスタのままで出力でき
    るようになったので、処理が高速になりました。

  4. その他、細かい設定ができる。
    cmds.txt を読んでみて下さい。


○ユーティリティーについて

  ◇γ補正をするためのPS。

    バブルジェットプリンタはインクが滲むため、絵画などの出力をすると調
    子が暗くなりがちです。そこで、γ補正をすると、より自然になります。
    このファイルはdevices.docから引用したものですが、γ=1.5, 2, 3の3種
    類のファイルを用意してあるので、適当なものを使って下さい。

  使用例:

  gs -q -dNOPAUSE -sDEVICE=bjc600jc -sOutputFile=tiger.bj \
		gamma20.ps tiger.ps quit.ps


  ◇BPFに印刷するために、鏡像を作るPS。

    BJC-600Jでは、バックプリントフィルム(BPF)が使用できるようになった
    のも特徴の一つですが、BPF は裏から印字するため、鏡像を生成しなけれ
    ばなりません。ドライバ側で対応しても良いのですが、とりあえず PS で
    作ってみました。

  使用例:

  gs -q -dNOPAUSE -sDEVICE=bjc600jc -sOutputFile=tiger.bj \
		mirrorA4.ps tiger.ps quit.ps

    A4 用しか作っていないので、他のサイズに使用する場合は適当に調整し
    て下さい。また、うまくいかないPSファイルもありますので、注意して下
    さい。
    (dvi2psj、xgrab、pnmtops でうまくいくことは確認しています)


  ◇ラスターイメージコマンドをテストするためのツール paramod。

    BJC-600Jのコマンドのパラメターをいじるためのツールです。普通は必要
    ないでしょう。具体的には、ESC ( コマンドと ESC [ コマンドのパラメ
    ターの置換えや、コマンドの削除を行います。コンパイルは、

	cc -O -o paramod paramod.c

    でOKです。

  使い方:

	paramod cmd nth newparam...

    nth番目に現れた ESC ( cmd ... あるいは ESC [ cmd ... を、ESC ( cmd
    newparam... あるいは ESC [ cmd newparam... に変更します。nth=0 の
    時はすべての当該コマンドに対して処理を行い、newparam... を何も指定
    しない時は、対象コマンドを削除します。

    cmd は英字1字、nthは8/10/16進整数、newparam... は8/10/16進整数を空
    白で区切って並べたものです。パラメターに負の数を指定した時は、その
    位置のパラメターの変更はされません。

  使用例:

    paramod A 0 0103  < bj_file

	すべてのラスターをシアンで印字するようにします。
	(0103は`C'の8進のアスキーコード)  

    paramod e 1 < bj_file

	トップマージンを0にします。

    paramod c 1 -1 0x11

	4分割片方向印字で印字させるようにします。


○暇があったらやりたいこと

処理の高速化。
色補正。
ドライバ側のバックプリントフィルムへの対応(鏡像印刷)。
B5、葉書など A4 以外の用紙サイズへの対応。


参考文献: Canon BJC-600J 操作ガイド、
	  Canon BJC-600J リファレンスガイド。


				國吉芳夫 (慶大理工計算機科学専攻)
				yoshio@nak.math.keio.ac.jp
