- - PR -
ドット単位で印刷-プリンタの解像度に合わせて
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-12 20:18
>GDIとGDI+で参照できる情報、操作できる対象が違うということ?
そういうことだと思いますよ? 明らかに、gdi32 と、GDI+ との精度は違いますからね。 とは、言っても、プリンタ屋さんのドライバに依存するので、 どちらが優れているとはかけませんが・・・ プリンタ屋さんによっては、.NET の方に力を入れてるかもしれませんし。 うちとしては、お付き合いのある数社のプリンタ屋さんと、 技術的な話をし始めました。 | ||||||||
|
投稿日時: 2006-12-12 21:36
ギャハハハハハハ!!!!! こいつってばスレもろくに読まずに脊髄反射してんのミエミエだったんで必ず引っかかると 思ってたけど実にみごとに嵌ってくれたなw この手を使うとスレ主だけを騙せるんよ。 ここまで純粋で素朴なオヤジも今時珍しぃっすね(^Э^) こんなヤツが上にいるんじゃ、色々大変だな>PAOの社員たち お前がのんきにパソコンに向かい、ハナクソほじりながら他人を罵倒していられるのは 懸命に働いてる社員たちのおかげだぞ。 少しは感謝してやれよ! ついでに雑魚が2匹ほどかかってたけど、そっちはどうでもいいや。 | ||||||||
|
投稿日時: 2006-12-13 06:19
そだね。うやむやにしてしまっていました。 PAOさん: まじめに尋ねているのに(2006-12-11 22:54 の、「1滴≠1ドットなんじゃない?」のあたり参照)、その辺を考えてくださっていないと感じ、売り言葉に買い言葉な反応をしてしまいました。申し訳ありませんでした。 ところで、まじめに、インク ジェットと仮定して、「1滴≠1ドットなんじゃない?」と思っているのですが、このお答えをいただいていません。 もちろん、コンポジットでない黒であれば1滴かもしれませんが、そうすると、複数のインクで表現される色と、ドットの大きさが異なるんじゃないか?という疑問です。PAOさんにとっては「1滴=1ドット」なのでしょうが、私にしては上記のように、カラーを考えると、イコールだと思えないのです。 このあたり、解説していただけないですか? それと、GDI と GDI+ でプリンタ ドライバとのやり取りが云々の件。 今の派遣先では、プリンタの開発をしています。ドライバとのやり取りが正確に出来ないとなると、ちょっと困るのです。現在 MFC で作られているアプリケーションを、.NET Framework で作り直すことを提案していますので。ドライバの開発は、別の部署でやっているので、口出しできません。が、本当に取れない場合が多いなら、アラームを上げなければなりません。しかし、今提示されている情報だけでは、根拠として不十分です。 また、PrintDocument クラスを使っている質問スレッドがちょこちょこあるわけですが、その人達みんなに影響します。 わかっている範囲で結構ですので、どの系統(メーカー、型番)のプリンタで不都合が生じるのか、お教えいただけないでしょうか。
私の方は、富士通 XL-6200、キヤノン iP4200 で実施しました。 スキャン画像は、インク ジェットである iP4200 でした。 なお、解像度はほとんどのプリンタで、数値としては選べませんが、「高画質 <-> 高速」という選択肢で選べるようです。富士ゼロックス、富士通、キヤノン、マイクロソフトのドライバで、選択できることを確認しています。リコーの場合は、「印刷品質」を「ユーザ設定」にすることで、選択できました。 _________________ | ||||||||
|
投稿日時: 2006-12-13 07:34
大変申し訳ないことをした。
特に、Jitta さんに対しては。 今更、何を書いているんだという事になるが・・・ Jitta さんの書かれた方法で、まず、間違いなく正しい。 全てのプリンタで、バーコードを出して検証したわけではないが、 まず、5台の、インクジェット・レーザー・カラーレーザーの プリンタで、検査しなおしたが、出力したバーコードは、 バーコード検査機によって、 ・私の書いた P/Invoke した、プログラム と、 ・Jittaさんに教えていただいたGDI+ のみでスマートに書かれたプログラム を、 比較したが、差異がなく、高精度なバーコードとして読み取れた。 最初にテストした、私のテストプログラムの記述ミスが、 原因で、このような事となってしまった。 すでに、どのような事を書かれても、仕方がない状態ではあるが、 私の度重なるミスと勘違い、きちんと書かない文章により、 まず、Jittaさんに、大変ご迷惑をかけて、申し訳ないです。 また、このようにスレッドを混乱させ、間違った情報を流し続けた事、 取り返しはつきませんが、申し訳ありませんでした。 最後に、なるべく簡単にしたコードを、まとめとして、付け加えておきます。 ここにも間違いや、足らない記述があれば、ご指摘ください。 以下のプログラムで、見た目には、全く重なった線が、印字されます。 また、 drawLinePao(e.Graphics); drawLineJitta(e.Graphics); のどちらかの呼び出しをコメントアウトなどではずしても、 見た目には、重ねて印字した結果と比べて全く変わらない線が印字されます。 -- private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { e.Graphics.PageUnit = GraphicsUnit.Millimeter; e.Graphics.DrawString("印刷テスト", new Font("MS 明朝", 32), Brushes.Black, new RectangleF(10,10,100,50), new StringFormat()); drawLinePao(e.Graphics); drawLineJitta(e.Graphics); } // あっしが、こねくり回して、 // gdi32 で実現した方法です。 [DllImport("gdi32.dll")] private static extern bool LineTo(IntPtr hDC, int x, int y) ; [DllImport("gdi32.dll")] private static extern bool MoveToEx(IntPtr hDC, int x, int y, IntPtr OldPoint); [DllImport("gdi32.dll")] private static extern int GetDeviceCaps(IntPtr hDC,int nIndex); private void drawLinePao(Graphics g) { IntPtr hDC = g.GetHdc(); // dpi の取得 int dpiX = GetDeviceCaps(hDC, 88); int dpiY = GetDeviceCaps(hDC, 90); // 線の描画 MoveToEx(hDC, 100, 500, IntPtr.Zero); LineTo(hDC, 100, 1000); // ちなみに、ここで、リリースしてはいけないようだ。 // 今後のロジックで、g(e.Graphics)を使用すると、 // リリースされているため使えなくなる事があるそうだ。 g.ReleaseHdc(hDC); } // GDI+ だけで、全然実現できます。 // Jitta さんに教えていただいた方法です。 private void drawLineJitta(Graphics g) { // dpi の取得 float dpiX = g.DpiX; float dpiY = g.DpiY; // 描画単位をピクセルにする g.PageUnit = GraphicsUnit.Pixel; // 線の描画 g.DrawLine(Pens.Black, 100, 500, 100, 1000); } -- [ メッセージ編集済み 編集者: PAO 編集日時 2006-12-13 07:38 ] | ||||||||
|
投稿日時: 2006-12-13 07:47
ほぇ〜
いや、ホント、良かった〜 安心して提案できるよ ご報告ありがとうございます まあ、私の書き方に問題もあったということで、あらためてお詫びします。すみませんでした。 _________________ | ||||||||
|
投稿日時: 2006-12-13 08:02
-- 引用
ところで、まじめに、インク ジェットと仮定して、「1滴≠1ドットなんじゃない?」と思っているのですが、このお答えをいただいていません。 もちろん、コンポジットでない黒であれば1滴かもしれませんが、そうすると、複数のインクで表現される色と、ドットの大きさが異なるんじゃないか?という疑問です。PAOさんにとっては「1滴=1ドット」なのでしょうが、私にしては上記のように、カラーを考えると、イコールだと思えないのです。 このあたり、解説していただけないですか? -- すいません、今、現状の私には、わからないです。 「インクジェットで複数のインクで表現される色は、 ドットの大きさが異なってくるのではないか?」 について、識者の方、わかる方がいらっしゃれば、教えてください。 -- 引用 それと、GDI と GDI+ でプリンタ ドライバとのやり取りが云々の件。 今の派遣先では、プリンタの開発をしています。ドライバとのやり取りが正確に出来ないとなると、ちょっと困るのです。現在 MFC で作られているアプリケーションを、.NET Framework で作り直すことを提案していますので。ドライバの開発は、別の部署でやっているので、口出しできません。が、本当に取れない場合が多いなら、アラームを上げなければなりません。しかし、今提示されている情報だけでは、根拠として不十分です。 また、PrintDocument クラスを使っている質問スレッドがちょこちょこあるわけですが、その人達みんなに影響します。 わかっている範囲で結構ですので、どの系統(メーカー、型番)のプリンタで不都合が生じるのか、お教えいただけないでしょうか。 -- これについては、先ほど投稿したように、 私の書いたバーコードのテストプログラムのミスから、 大変、罪の大きな勘違いをしておりました。 本当に申し訳ないです。 まず、まちがいなく、GDI+ で、問題ないものと思われます。 ちなみに、私が、バーコードの検査機で検査して、 問題のなかった5台のプリンターは・・・ ・brother MFC-7820N ・EPSON LP-1200 ・EPSON LP-S5500 ・キャノン PIXUS iX5000 ・富士ゼロックス DocuPrint C1616 です。 | ||||||||
|
投稿日時: 2006-12-13 09:27
識者ではないですし、詳しくも無いのですが。 3色の点の重なり具合で色調を出すのがカラー印刷の基本だと聞いたように思います。 ですから、インクジェットで3色のインクで黒を表現する場合は3色のインクを全て使うことになります。 一色のインクの最低量を1適だと仮定しても、最低3滴は使うということですよね。 すると3滴のインクの方が当然滲みやすくなると・・・ Jittaさんの投稿を読んで、そう言った話なのかなー、と勝手に思ってましたが。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||||||
|
投稿日時: 2006-12-13 10:09
Ognacです。
便乗質問になり申し訳ないです。言葉の定義がヤヤコシイのですが,私は、このスレッドの流れから, 1dot = 1ピクセル = プリンタが描画できる最低の1直線の幅 と解釈しました。 物理的には、三原色のインクしかないので1直線上には複数のインクが被るので滲んで幅ができきますよね? 疑問に感じたのは,プリンタドライバは, 多色のインクを使う3原色以外を描画するとき, 同一点に描画するようになっているのでしょうか,それとも,TVのように3原色の的があり、ずらして描画するのでしょうか。 解像度と色構成による占有幅の関係が, 見えませんので,よろしくお願い致します。 _________________ ognac@わんくま同盟 [ メッセージ編集済み 編集者: ognac 編集日時 2006-12-13 10:10 ] |