С ZBar-Sharp (https://github.com/jonasfj/zbar-sharp), изображение было обработано с помощью системной библиотеки в классе Image с кодом ниже
===============
public Image(System.Drawing.Image image) : this() {
Byte[] data = new byte[image.Width * image.Height * 3];
//Convert the image to RBG3
using(Bitmap bitmap = new Bitmap(image.Width, image.Height, PixelFormat.Format24bppRgb)){
using(Graphics g = Graphics.FromImage(bitmap)){
g.PageUnit = GraphicsUnit.Pixel;
g.DrawImageUnscaled(image, 0, 0);
}
// Vertically flip image as we are about to store it as BMP on a memory stream below
// This way we don't need to worry about BMP being upside-down when copying to byte array
bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY);
using(MemoryStream ms = new MemoryStream()){
bitmap.Save(ms, ImageFormat.Bmp);
ms.Seek(54, SeekOrigin.Begin);
ms.Read(data, 0, data.Length);
}
}
//Set the data
this.Data = data;
this.Width = (uint)image.Width;
this.Height = (uint)image.Height;
this.Format = FourCC('R', 'G', 'B', '3');
}
===============
И позже преобразован в Y800 изнутри Zbar.
Однако при таком подходе точность сканирования была снижена, когда я сравнил собственное сканирование ZBar с правильным значением 99.x%, тогда как оболочка .Net имела только 80%.
Поскольку ZBar изначально использует магию изображений для задач обработки изображений, было предложено использовать imageMagic.Net для обработки изображений и передачи в Zbar DLL вместо использования библиотеки .Net.
Поэтому я подумал, что класс Image внутри ZBarSharp должен быть обновлен с перегрузкой, как показано ниже
=================
public Image(string fileName)
: this()
{
MagickImage image = new MagickImage(fileName, settings);
//Set the data
this.Data = image.ToByteArray();
this.Width = (uint)image.Width;
this.Height = (uint)image.Height;
this.Format = FourCC('R', 'G', 'B', '3');
}
=================
Однако я понял, что хотя исходная библиотека .Net создает изображения Byte [] длиной около 5650614 и смещением 54 для получения 5650560 для одного конкретного файла, imageMagic читает тот же файл и генерирует Byte [] длиной 15194, что значительно меньше, а также Byte [] из imageMagic.Net всегда не дает результатов сканирования. Я пробовал много разных настроек для imageMagic Read по плотности, формату и т. Д., Но длина массива всегда была короткой, и я не получил результатов сканирования.
Просто интересно, может ли кто-нибудь помочь мне указать, что я упустил, чтобы использовать imageMagic.Net для аналогичного эквивалента, созданного библиотекой .Net, но лучшего качества?
Спасибо в Adv.
Задача ещё не решена.
Других решений пока нет …