我正在为非常简单的识别图像编写 C# lib,以便在其中使用它monodroid
并使用zxing
C# 的端口。但是在我从文件中读取图像字节后,我会做这样的事情,就像zxing
条形码扫描一样。
binaryBitmap = new BinaryBitmap(new HybridBinarizer(new RGBLuminanceSource(rawRgb, width, height, format)));
但不知何故,它通过垂直反转图像。我只是binaryBitmap
按像素将位图保存到文件中。
请帮助我理解为什么会这样?我究竟做错了什么?
@Michael 正在使用 Zxing.Net.Mobile 端口,来自这里https://github.com/Redth/ZXing.Net.Mobile。这对我来说很奇怪,我使用的是 PlanarYUVLuminanceSource - 然后我得到这样的图像http://i.imgur.com/OlwqC0I.png,但如果我使用的是 RGBLuminanceSource ,那么我会得到完整的几乎正常的图像,请参见示例图像。所以现在我什至有两个问题:
- 为什么平面只取图像的一部分并具有“层对层”效果?和
- 好的,如果我将使用 RGBLuminanceSource 那么为什么它有一些颜色反转,我的意思是矩形边框在某处是黑色的,而在某处它们是白色的。因为它的真实形象他们都是黑色的?
更新:这是我从设备获取字节的方式,也如您所见,我设置了 nv21 格式,所以它必须是 YUV,不是吗?我想知道,我做错了什么,rgb 源工作(在列表图像上没问题)和 PLAnarYUV 不是 :((顺便说一句,来自预览帧的原始字节有结果和相同的文件大小。有什么建议吗?
public void OnPreviewFrame(byte[] bytes, Android.Hardware.Camera camera)
{
var img = new YuvImage(bytes, ImageFormatType.Nv21, cameraParameters.PreviewSize.Width, cameraParameters.PreviewSize.Height, null); string _fileName2 = "YUV_BYtes_"+ DateTime.Now.Ticks +".txt";
string pathToFile2 = Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, _fileName2);
using (var fileStream = new FileStream(pathToFile2, FileMode.Append, FileAccess.Write, FileShare.None))
{
fileStream.Write(img.GetYuvData(), 0, img.GetYuvData().Length);
}
}
public void SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height)
{
if (camera == null)
return;
var parameters = camera.GetParameters();
width = parameters.PreviewSize.Width;
height = parameters.PreviewSize.Height;
parameters.PreviewFormat = ImageFormatType.Nv21;
//parameters.PreviewFrameRate = 15;
//this.height = size.height;
//this.width = size.width;
//camera.setParameters( params );
//parameters.PreviewFormat = ImageFormatType.;
camera.SetParameters(parameters);
camera.SetDisplayOrientation(90);
camera.StartPreview();
cameraResolution = new Size(parameters.PreviewSize.Width, parameters.PreviewSize.Height);
AutoFocus();
}