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 件のコメント:
コメントを投稿