Конференция "Начинающим" » Массив байт в JPEG (картинка) [D7, Win2k]
 
  • ggg111 (26.03.09 12:29) [0]
    Добрый...
    получаю с устройства картинку - массив байт изображения JPEG
    640х480 16 bit color
    как обработать данный массив, т.е. отобразить на форме?
  • Дмитрий С (26.03.09 12:44) [1]
    uses Jpeg

    TJpegImage
  • ggg111 (26.03.09 13:58) [2]
    LoadFromStream ?

    но в потоке нет заголовка JPEG
    самому сделать?
  • DrPass © (26.03.09 15:39) [3]

    > но в потоке нет заголовка JPEG

    А ты уверен, что это именно JPEG?
  • GGG111 (26.03.09 16:28) [4]
    Абсолютно уверен, потому что это написано в спецификации.
  • Сергей М. © (26.03.09 16:43) [5]

    > в потоке нет заголовка JPEG


    Как получаешь поток ?
    Иллюстрируй в коде ..
  • GGG111 (26.03.09 16:49) [6]
    InitComm;
     GetDataFromDevice;
     j := 0;
     while (True) do
     begin
         ReadFile (hComm,BigBuff[j],512,dwREaded,nil);
         if (dwreaded = 0) then break;
         inc (j,dwReaded);
     end;

     вообщем-то вот так...
  • Сергей М. © (26.03.09 16:57) [7]
    Что творится в GetDataFromDevice ?
    Где анализ результата вызова ReadFile ?
    И где тут фигурирует TStream ?
  • GGG111 (26.03.09 17:05) [8]
    GetDataFromDevice
     - запрос данных с устройства в формате JPEG разрешение 640 на 480  color 16 bit

      BigBuff : array [0..X] of Byte;

    в  ответ на это получаю массив байт размером Size .
    while (True) do
    begin
      ....    
    end;

    Далее вопрос как это все дело отобразить на форме?

    Да, конечно, я могу сделать

    T : TMemoryStream;
    T.Size := Size;
    T.ReadBuffer (BigBuff,Size);

    и получить Stream

    (и потом естественно сразу писать в данные в Stream без буффера)
  • Сергей М. © (26.03.09 17:07) [9]
    Чему равен X ?
    Откуда ты узнал Size ?
  • GGG111 (26.03.09 17:08) [10]
    X - получен "с потолка"

    Size := GetDataFromDevice;
  • Сергей М. © (26.03.09 17:21) [11]

    > X - получен "с потолка"


    Зашибись.
    А если X, свалившийся с потолка, вдруг окажется меньше Size ? Ведь GetDataFromDevice, насколько я понимаю, возвращает полный размер данных, являющих собой полноценное JPEG-кодированное изображение, запрошенное у дивайса для передачи ?
  • GGG111 (26.03.09 17:27) [12]
    Ну поскольку вопрос то как массив отобразить на экране  я пока не заморачивался по поводу Х  он просто указан примерно 2*Size

     естественно я позабочусь о том чтобы не выйти за границу массива.
     
     BigBuff  :  array of Byte;

     ...
      Size := GetDataFromDevice;
      SetLength (BigBuff, Size + 1);
  • clickmaker © (26.03.09 17:31) [13]
    > как массив отобразить на экране

    там что - только само изображение, без заголовка, т.е. битовая карта?
  • Сергей М. © (26.03.09 17:35) [14]
    Ну если GetDataFromDevice возвращает размер собственно JPEG-кодированных данных 640х480х16, то наверно заголовок придется формировать самому.
  • DVM © (27.03.09 00:21) [15]

    > 640х480 16 bit color

    Чке то я не слышал, чтобы в JPEG был 16 бит цвет. Обычно 24 бит или 8, если он в оттенках серого. А вот чтобы 16... 16 бит бывают JPEG2000 картинки. Может это JPEG2000?
  • Тыщ © (27.03.09 08:12) [16]
    А можно узнать содержание массива?
 
Конференция "Начинающим" » Массив байт в JPEG (картинка) [D7, Win2k]
Есть новые Нет новых   [134435   +4][b:0][p:0]