我正在开发一个WP8应用程序来使用ZXing扫描条形码。如果图像仅包含ITF条形码,它可以扫描条形码。但是,如果条形码位于大图像内,则无效。
所以我想我必须将大图像裁剪成较小的图像才能应用扫描过程。我是对的吗?
所以,我的问题是: 是否有一些最佳实践,或者我需要应用一些算法来随机选取大部分图像?
贝娄是我的代码:
StorageFolder folder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync("Assets");
BitmapImage bitmapImage = await GetBitmapImage(folder, "LargeImage.png");
WriteableBitmap btmMap = new WriteableBitmap(bitmapImage);
var rgb = new BitmapLuminanceSource(btmMap);
var hybrid = new HybridBinarizer(rgb);
BinaryBitmap binBitmap = new BinaryBitmap(hybrid);
Dictionary<DecodeHintType, object> zxingHints
= new Dictionary<DecodeHintType, object>() { { DecodeHintType.TRY_HARDER, true } };
Reader reader = new ZXing.OneD.MultiFormatOneDReader(zxingHints);
try
{
Result result = reader.decode(binBitmap);
if (result != null)
{
this.resultText = result.Text;
}
}
catch (Exception ex)
{
this.resultText = ex.Message;
}
答案 0 :(得分:2)
我建议使用Lumia Imaging SDK(以前的诺基亚成像SDK)为您提供硬件加速过滤器,例如从此页面获取的CropFilter示例:https://msdn.microsoft.com/en-us/library/lumia.imaging.transforms.cropfilter.aspx
using (var filterEffect = new FilterEffect(source))
{
// Initialize the filter and add the filter to the FilterEffect collection
var filter = new CropFilter(new Windows.Foundation.Rect( 260, 210, 670, 446));
filterEffect.Filters = new IFilter[] { filter };
// Create a target where the filtered image will be rendered to
var target = new WriteableBitmap(width, height);
// Create a new renderer which outputs WriteableBitmaps
using (var renderer = new WriteableBitmapRenderer(filterEffect, target))
{
// Render the image with the filter(s)
await renderer.RenderAsync();
// Set the output image to Image control as a source
ImageControl.Source = target;
}
await SaveEffectAsync(filterEffect, "CropFilter.jpg", outputImageSize);
}
答案 1 :(得分:0)
ZXing具有内置的方法,可以在解码之前裁剪图像。它发生在LuminanceSource步骤中,在该步骤中,彩色图像将根据每个像素的Luminance变为灰度。这样可以减少需要处理的数据量。
示例:
var rgb = new BitmapLuminanceSource(New BitmapLuminanceSource(btmMap).crop(Frame.Left, Frame.Top, _Frame.Width, Frame.Height));
其中的框是一个矩形,描述您要搜索条形码的区域。通常通过在用户界面中绘制一个视口以使条形码居中来描述该矩形。
这个答案主要是针对那些通过Google搜索最终来到这里的人,因为有很多原因导致您的代码无法正常工作,并且您现在可能已经退出了该项目。例如:为什么要从PNG文件而不是手机内置的网络摄像头加载图像?