所以,首先,我要做的是:https://forums.hololens.com/discussion/3263/zxing-unity-barcode-dll-issue
事实上,我的目标与帖子的作者相同,但我不同意他的一些结论,特别是关于UWP的用法。他选择使用Unity网络摄像头,我选择使用UWP框架,IMO可以更好地工作,减少AR应用程序的FPS下降。
但他的一些方法非常有趣,尤其是他与象限的合作。我正试图用UWP技术重现它,并且有一些问题。
我已经阅读了有关如何创建子Bitmap的每篇文章,但每个解决方案都使用Bitmap库(System.Drawing),而给定的格式是softwareBitmap。我尝试重新创建一个原始数组的Bitmap(我可以从我的softwareBitmap中获取它),但它似乎是crapy。
所以,这是我的问题:有没有办法在softwareBitmap模型上重新创建这个象限概念?无论如何,每个解决方案都很好(位图,原始数组等......)
以下是我用于zxing的代码示例,我将修改以集成象限扫描:
private void ColorFrameReader_FrameArrived(MediaFrameReader sender, MediaFrameArrivedEventArgs args)
{
var mediaFrameReference = sender.TryAcquireLatestFrame();
var videoMediaFrame = mediaFrameReference?.VideoMediaFrame;
var softwareBitmap = videoMediaFrame?.SoftwareBitmap;
if (softwareBitmap != null)
{
if (softwareBitmap.BitmapPixelFormat != Windows.Graphics.Imaging.BitmapPixelFormat.Bgra8 ||
softwareBitmap.BitmapAlphaMode != Windows.Graphics.Imaging.BitmapAlphaMode.Premultiplied)
{
softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
}
softwareBitmap.CopyToBuffer(buffer);
buffer2 = buffer.ToArray();
result = DecodeBufferToQRCode(buffer2, softwareBitmap.PixelWidth, softwareBitmap.PixelHeight, BitmapFormat.BGRA32);
if(result != null)
{
print("Call send to zxing, result : " + result.Text);
}
else
{
}
}
mediaFrameReference.Dispose();
}
提前致谢,
沙德
第一次编辑:我可能有一个基于byte []数组上的行操作的解决方案,我可以从softwareBitmap中检索,但就Hololens的CPU和内存而言,它看起来真的很重。因此,我认为如果有人拥有它,原生解决方案(使用Bitmap)仍然会更好。解决方案使用此结构
// 3 | 4
List<byte[]> subImages; // the order is 1 | 2 in the list (so 1 is the inferior left corner of the pict)
使用这种代码
//Code used for picture splitting and decoding.
void imageProcess(byte[] image)
{
for(int i =0; i<= image.Length; i++)
{
if(i%resW < halfresW && i%resH < halfresH) //1
{
}else if (i % resW < halfresW && i % resH > halfresH)//3
{
}else if (i % resW > halfresW && i % resH < halfresH)//2
{
}
else//4
{
}
}
//Then, process each
}
但是在这一点上,我很丢失:当我的Bitmap使用32bpp(RGBA)时,我应该将所有数组统计数据(分辨率和半分辨率)乘以4吗?