WriteableBitmapを使い、Imageにバーコードの画像をセットします。
それを印刷すれば、完璧なバーコードのエコシステムが出来上がるはずでした。
しかし、実機のバーコードリーダーでは読み取ることができません。
バーの並びというか、配列が変化し、変質しているのです!
試しに、PDFプリンターに印刷したらどうかと思い、試しました所、再現しました。変質しています。
結局、バーコードのビットマップを印刷するのはやめて、Canvasの中にRectangleを詰め込むようにしたら、いけました。
zxingを使ったサンプル。ご利用の際は、自己責任で:
public class Code39Printer : Viewbox { public static DependencyProperty TextProperty = DependencyProperty.Register( "Text", typeof(String), typeof(Code39Printer), new PropertyMetadata( TextChangedCallback ) ); public String Text { get { return (String)GetValue(TextProperty); } set { SetValue(TextProperty, value); } } static void TextChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) { var self = (Code39Printer)d; var wr = new Code39Writer(); bool[] bin = wr.encode(("" + e.NewValue + "").Trim('*').ToUpperInvariant()); int cx = bin.Length; Canvas cv = new Canvas(); int BW = 1; int BH = 20; int MH = 3; int MW = 10; cv.Height = MH + BH + MH; cv.Width = MW + cx * BW + MW; for (int x = 0; x < cx; x++) { if (bin[x]) { Rectangle r = new Rectangle(); r.Fill = Brushes.Black; Canvas.SetTop(r, MH); Canvas.SetLeft(r, MW + BW * x); r.Width = BW; r.Height = BH; cv.Children.Add(r); } } self.Child = cv; } }
使い方、例:
<MY:Code39Printer Text="{Binding bacord}" xmlns:MY="clr-namespace:YOURNAMESPACE" />
0 件のコメント:
コメントを投稿