- PR -

ドット単位で印刷-プリンタの解像度に合わせて

投稿者投稿内容
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-08 17:00
プリンタの解像度に合わせて、ドット単位で、
線をGraphicsに描画して、印刷したいと思っております。

今のプリンタの解像度は、大体300dpi の倍数になっておりますので、
GraphicsUnit.Document
を使用すれば、大きさとしては、正しく印字されます。
しかし、印字結果は・・・
どう考えても、ドット単位に印字されているとは思えない、
荒さになってしまいます。

C#で、無理であれば、VC++ 等で、DLL を作る事も考えております。
方法があれば、ご教授ください。

よろしくお願いいたします。
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-08 17:11
要は、プリンタのデバイスコンテキストを捕まえて、
そこに直接描画。すれば、いいって事なんですかね?^^

よくわからん・・・
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-08 18:23
なお、このメソッドを使用する、実際に印刷をする呼び出し元には、
GDI+ の Graphics オブジェクトを返そうと思っていたのですが、
それは、無理な相談なのですかね?

hdc をインタフェイスとするしか方法は無いでしょうか?

[ メッセージ編集済み 編集者: PAO 編集日時 2006-12-08 18:24 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-08 22:29
ここで言われている「ドット」って、なんですか?
_________________
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-09 05:25
ピクセルです。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-09 13:23
引用:

PAOさんの書き込み (2006-12-09 05:25) より:
ピクセルです。

だから、なんの?

まず、あなたが思っているであろう、1ドットがインク1滴から構成されているのか、確認が必要ではないですか?
_________________
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-09 14:12
ドットや、ピクセルが、プリンタの解像度の最小単位を、
指していることは、わかっていての逆質問なのですね?

その上で、どうやって、確認するのかが知りたいのですね?
で、あれば、システム的ではありませんが、
出力結果を計測する検査機のようなものがあると、
前提として思っておいてください。
PAO
ベテラン
会議室デビュー日: 2004/10/21
投稿数: 66
投稿日時: 2006-12-09 16:17
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());

drawLine(e.Graphics);
}

[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);

private void drawLine(Graphics g)
{
IntPtr hDC = g.GetHdc();

MoveToEx(hDC, 100, 500, IntPtr.Zero);
LineTo(hDC, 100, 1000);

//Release the device context handle obtained by a previous call
g.ReleaseHdc(hDC);

}


な感じで、できました。

要は、GDI+ と、gdi32 の共存ができるか、知りたかったんですね。^^

スキルアップ/キャリアアップ(JOB@IT)