В C # я использую ручной сканер Honeywell в качестве устройства обработки изображений через Serialport.read (). Я даю команды сканеру, и хотя он возвращает байтовый массив изображения, данные также содержат данные префикса и суффикса (неизвестной длины), которые ведут / следуют за самим изображением (данные, которые мне нужно удалить, чтобы все, что осталось, былотолько одно изображение).
Я могу «искать» изображение JPEG в потоке, преобразовав его в шестнадцатеричное и ища «FF D8 FF» в качестве начала и «FF D9» в качестве конца (какздесь объяснено: Как идентифицировать содержимое байта [] в формате JPEG? )
Таким образом, я могу выбрать изображение в шестнадцатеричном формате, и тогда у меня есть то, что я считаю шестнадцатеричнымстрока действительного изображения JPEG (начинается с FF D8, FF и т. Изображение строки в байтах и фильтрация ) в двоичный файл не дают правильного изображения:
private byte[] HexString2Bytes(string hexString)
{
int bytesCount = (hexString.Length) / 2;
byte[] bytes = new byte[bytesCount];
for (int x = 0; x < bytesCount; ++x)
{
bytes[x] = Convert.ToByte(hexString.Substring(x * 2, 2), 16);
}
return bytes;
}
Я что-то упускаю здесь очевидное? Есть ли более простой способ «найти» изображение jpeg в байтовом массиве, который содержит начальные / конечные данные (без необходимости преобразования его в шестнадцатеричное)?
Спасибо за любые указатели.