Извлечение изображения jfif из 2d штрих-кода - PullRequest
0 голосов
/ 28 июля 2011

У меня есть данные, считанные со 2-го штрих-кода pdf417.Он содержит внедренное изображение в формате (jfif). Изображение находится не в начале декодированных данных, оно имеет некоторые поля данных, а изображение находится где-то после, поля данных не имеют швов фиксированной длины.Как я могу извлечь изображение из декодированных данных.Я использовал библиотеку ClearImage для декодирования штрих-кода, и у меня есть его как текст и Hex.Пожалуйста помоги.Заранее спасибо

1 Ответ

1 голос
/ 28 июля 2011

Мне удалось извлечь изображение, благодаря многим экспертам в StackOverflow, я просматривал их посты.Следующий код объясняет, как извлечь изображение из смешанного двоичного файла, код не так красив, но он может сделать свою работу.Он ищет (JFIF) заголовок изображения и извлекает его в файл изображения.

public static void ExtractImage(string fname)
{
try
{
FileStream fs = new FileStream(fname, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
//read the first binary
char[] soi="Empty".ToCharArray();
br.BaseStream.Position = 0;
long imgpos = 0;
ushort r = 0;
while ((r = br.ReadUInt16())> 0)
{
Console.WriteLine(r);
if (r == 0xd8ff)
{
Console.WriteLine("Detcted----->");
imgpos = br.BaseStream.Position;
break;
//UInt16 jfif = br.ReadUInt16(); // JFIF marker
//Console.WriteLine("jfif " + jfif);
//if (jfif == 0xe0ff || jfif == 57855)
//    Console.WriteLine(" also Detected--->");
}
}
//now copy to stream
FileStream str = new FileStream("bcimage.jpg", FileMode.OpenOrCreate,   FileAccess.Write);
BinaryWriter bw = new BinaryWriter(str);
br.BaseStream.Position = imgpos-2;
int l = (int)(fs.Length - imgpos - 2);
bw.Write(br.ReadBytes(l));
fs.Close();
br.Close();
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}
}
...