1

グラフィックオブジェクトを作成し、コード39バーコードのさまざまなバーを描画する、仕事用のバーコードアプリケーションを作成しています。次のコードでグラフィックス オブジェクトを作成します。

int reqBarcodeWidth = 100;
int reqBarcodeHeight = 40;

objBitmap = new Bitmap(reqBarcodeWidth, reqBarcodeHeight);
            
objGraphics = Graphics.FromImage(objBitmap);

ただし、私がやりたいことの 1 つは、グラフィックス オブジェクトへの描画にさまざまな単位を使用できるようにすることです。たとえば、次のようになります。

objGraphics.PageUnit = GraphicsUnit.Inch;

ただし、これを行う場合、バーコード全体を収めるために作成するビットマップのサイズをどのように知ることができますか?

助けてくれてありがとう。

アップデート:

返信いただきありがとうございます。以前にバーコード フォントを見たことがありますが、多くのマシンにフォントをインストールする必要はありません。

また、言及しなかったプログラムの機能の 1 つは、関連付けられた EAN コードを持たない倉庫のストック コードを印刷することです。これらは通常、複雑な在庫コードを持つ中国からの商品です。これらは Code 128 バーコードを使用する必要があります。このバーコードは、拡張された範囲の文字を使用し、スペースも節約します。

難しい部分は、整理する必要があるイメージを作成するだけです。これを複雑な方法でやろうとしているかどうかはわかりませんが、これまで画像に関する作業を実際に行ったことはありません。

4

2 に答える 2

2

ただし、これを行う場合、バーコード全体を収めるために作成するビットマップのサイズをどのように知ることができますか?

ビットマップは、通常 DPI (ドット/インチ) で測定される特定の解像度を持つ物理デバイスに基づいています。Windows OS は、モニターに 96 または 120 dpi の論理解像度を割り当てます。プリンターの物理解像度は 300 ~ 600、場合によっては 1200 以上です。フィルムを処理するイメージセッターは、最大 2540 DPI 以上の物理解像度を持つことができます。

論理解像度とは、特定のデバイスで X ドットが 1 インチに等しいことを意味します。通常、これは近似値であり、ズームに使用できます。物理解像度は、デバイスが 1 インチあたり X ドット数を実現できる (または物理的に存在する) ことを示します。

バーコードを作成してデバイスに印刷するときは、そのデバイスの解像度を考慮する必要があります。幅が 4 インチのバーコードを 600 dpi のプリンターで印刷する場合、幅 4 * 600 = 2400 ピクセルのビットマップが必要になります。コードのバーを誤って縮小/拡大しないように、特定のデバイスでの印刷には他の影響があります。

私のとりとめのないポイントは、.WMF や .EMF などのベクター形式を使用してバーコードを生成し、出力先のデバイスに合わせて調整されたビットマップにレンダリングする必要があるということです。これにより、CorelDRAW や Adob​​e Illustrator などのベクター描画プログラムでコードを編集することもできます。

すべてではないにしてもほとんどのバーコードには、特定のエンコーディング (バーコードでエンコードされた記号) が与えられた場合の最終的なコードのインチ単位の幅を示す幅の公式があります。

少しの知識があれば、次のようなものを使用してバーコードを作成できます (この vb.net コードをコピーして、新しいプロジェクトの form.load またはボタン クリック イベントに貼り付けます)。


Dim gfx As Graphics = Me.CreateGraphics
Dim hdc As IntPtr = gfx.GetHdc()
Dim mf As System.Drawing.Imaging.Metafile = New Imaging.Metafile("c:\1.wmf", hdc, New RectangleF(0, 0, 5 * 2540, 1 * 2540), Imaging.MetafileFrameUnit.GdiCompatible)
Dim g As Graphics = Graphics.FromImage(mf)
g.PageUnit = GraphicsUnit.Inch

g.FillRectangle(Brushes.Blue, New RectangleF(0, 0, 5, 1))
g.FillRectangle(Brushes.Red, New RectangleF(0.25, 0.25, 4.5, 0.5))

g.Dispose()
mf.Dispose()
gfx.ReleaseHdc(hdc)
gfx.Dispose()
  • メタファイル コンストラクターの寸法は、インチ * 2540 です。2540 は、1 インチあたり 0.01 ミリメートルを表す定数です。これは、基になる GDI が使用するものです。

CorelDRAW や Illustrator などの実際のベクター グラフィック プログラムで「1.wmf」ファイルを開きます。(MSPaint や Windows Preview などは使用できません...) 4.5 x 0.5 の赤い四角形が中央に配置された 5x1 の青い四角形があることに気付くでしょう。

これは、バーコードをメタファイルに描画する方法です。青と赤の長方形コードをバーコード描画ルーチンに置き換えます。透明なサイズ変更フレームを作成して、メタファイルに図面の境界を伝えることを忘れないでください。


g.FillRectangle(Brushes.Transparent, rectBounds)

バーコードを描画してメタファイルに保存したら、GDI+ を使用して読み込んで、出力デバイスの解像度を持つビットマップにレンダリングできます。もちろん、出力デバイスにベクトルまたはポストスクリプト プロセッサが組み込まれていない限り、最後のステップはビットマップを出力デバイスに送信することです。

まあ、それはおそらくあなたがトピックについて知りたいと思っていた以上のものでしたが、それは正しい方法であり、コードが「スキャン不能」であると非難された場合に、多大な時間と心痛を節約できます.. .

頑張ってください。それがどうなるか教えてください。

于 2009-05-27T21:35:33.090 に答える
2

バーコードを描画するフォントが存在することを知っているので、この混乱をすべて回避できますか???

于 2009-05-13T12:01:32.310 に答える