Итак, для начала вот что я пытаюсь сделать: https://forums.hololens.com/discussion/3263/zxing-unity-barcode-dll-issue
На самом деле, у меня та же цель, что и у автора поста, но я не согласен с некоторыми изего заключение, особенно об использовании UWP.Он решил работать с веб-камерой Unity, а я решил работать с UWP-инфраструктурой, которая, IMO, лучше работает с меньшим количеством падений FPS в приложениях AR.
Но некоторые его подходы действительно интересны, особенно его работас квадрантом.Я пытаюсь воспроизвести его с помощью технологии UWP, и у меня возникли некоторые проблемы.
Я уже прочитал каждый пост о том, как создать суб-растровое изображение, но каждое решение использует библиотеку растровых изображений (System.Drawing), в то время какДанный формат является программным битмапом.Я пытался воссоздать растровое изображение с необработанным массивом (я могу получить его из моего softwareBitmap), но, похоже, это чушь.
Итак, вот мой вопрос: есть ли способ воссоздать этот квадрантПонятие о модели программного обеспечения Bitmap?Как бы то ни было, каждое решение хорошо (растровое изображение, необработанный массив и т. Д.)
Вот пример кода, который я использовал для 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();
}
Заранее спасибо,
Shad
1-е РЕДАКТИРОВАНИЕ: Возможно, у меня есть решение, основанное на манипулировании строками в массиве byte [], которое я могу получить из softwareBitmap, но, похоже,чтобы быть действительно тяжелым, с точки зрения процессора и памяти для Гололенса.Итак, я думаю, что нативное решение (с растровым изображением) все равно будет лучше, если у кого-то оно есть.
Решение использует эту структуру
// 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
}
Но в этот момент я совершенно растерялся: хотя в моем растровом изображении используется 32bpp (RGBA), я должен умножить на 4 все мои характеристики массива (разрешение и половину разрешения)?