我正在使用 ZXing-Core(0.14.0.2)创建一个条形码,它给我一个BitMatrix,但是我还没有找到关于如何从中提取图像部分的文档BitMatrix 并将其用作 BitMap ,以便我可以合并到我更大的图像中。最终我想要的结果是:
我目前的代码是:
img = new Bitmap(300, 375);
drawing = Graphics.FromImage(img);
var barCode = new Code128Writer().encode(packageModel.TrackingId.PrintValue, BarcodeFormat.CODE_128, 280, 70);
src = transform **barCode** to **Drawing.Image**
drawing.DrawImage(src, new Rectangle(10, 255, 280, 70));
更新 我现在有这个代码,但是我收到错误你必须设置一个渲染器实例。我不明白为什么接口本身没有实例化这个类。没有可用的文档揭示它应该如何工作。我不能使用 Write 函数,因为Rendering设置为null,但我不确定如何实例化它。
IBarcodeWriterGeneric<Image> barcodeWriterGeneric = new BarcodeWriterGeneric<Image>
{
Format = BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Width = 280,
Height = 70
},
Renderer = new PixelData() //HOW DOES THE RENDERER WORK????
};
var test = barcodeWriterGeneric.Write("WORKS");
drawing.DrawImage(test, new Rectangle(10, 255, 280, 70));
答案 0 :(得分:1)
据我所知,ZXing-Core fork缺少PixelDataRenderer类。它只包含RawRenderer。您应切换到当前版本为0.15.0的原始ZXing.Net软件包。那个包含条形码编写器类“BarcodeWriterPixelData”,它执行Renderer属性的必要初始化。下一版本的ZXing.Net将包含一些更专业的绑定到其他.Net Core兼容的成像库,如CoreCompat.System.Drawing,ImageSharp,OpenCV等。使用该绑定,您可以生成除PixelData之外的其他输出格式。
答案 1 :(得分:1)
创建一个实现IBarcodeRenderer<TOut>
的渲染器。这个适用于我在iOS中。
var writer = new BarcodeWriter<UIImage>()
{
Format = ZXing.BarcodeFormat.CODE_128,
Options = new EncodingOptions
{
Height = height,
Width = width,
Margin = 0
},
Renderer = new BarcodeRenderer()
};
var image = writer.Write(barcodeValue);
private class BarcodeRenderer : IBarcodeRenderer<UIImage>
{
public UIImage Render(BitMatrix matrix, ZXing.BarcodeFormat format, string content)
{
return RenderMatrix(matrix);
}
public UIImage Render(BitMatrix matrix, ZXing.BarcodeFormat format, string content, EncodingOptions options)
{
return RenderMatrix(matrix);
}
}
/// <summary>
/// Renders the bitmatrix.
/// </summary>
private static UIImage RenderMatrix(BitMatrix matrix)
{
var width = matrix.Width;
var height = matrix.Height;
var black = new CGColor(0f, 0f, 0f);
var white = new CGColor(1.0f, 1.0f, 1.0f);
UIGraphics.BeginImageContext(new CGSize(width, height));
var context = UIGraphics.GetCurrentContext();
for (var x = 0; x < width; x++)
{
for (var y = 0; y < height; y++)
{
context.SetFillColor(matrix[x, y] ? black : white);
context.FillRect(new CGRect(x, y, 1, 1));
}
}
var img = UIGraphics.GetImageFromCurrentImageContext();
UIGraphics.EndImageContext();
return img;
}