Русский / Russian English / Английский

Сейчас на форуме: lx600, Magister Yoda (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Программирование —› Раскодировать массив графических данных
Посл.ответ Сообщение

Ранг: 5.8 (гость)
Статус: Участник

Создано: 25 июня 2020 18:00 · Поправил: newbie_raw New!
Цитата · Личное сообщение · #1

Здравствуйте участники форума!
В наличии блок данных следующего формата:
сам массив:
Code:
  1. 0000162C | 08 45 51 90 A0 D9 FF 8E 0B 58 F2 A4
  2. 00001638 | 1B 80 7E DC E3 19 EB F3 05 84 E4 7C
  3. 00001644 | 3E 00 00 00 00 00 00 00 00 00 00 00
  4. 00001650 | 00 00 00 00 00 00 E0 BF FB 19 CE D7
  5. 0000165C | E1 7C 21 7F 36 7F 78 00 65 78 00 45

Вот так я использую в программе:
Code:
  1. unsigned char test[] = {
  2.                  0x78, 0x9C, 0xED, 0xD6, 0x51, 0x72, 0xC3, 0x30, 0x08, 0x45, 0x51, 0x90, 0xA0, 0xD9, 0xFF, 0x8E,
  3.                  0x0B, 0x58, 0xF2, 0xA4, 0x1B, 0x80, 0x7E, 0xDC, 0xE3, 0x19, 0xEB, 0xF3, 0x05, 0x84, 0xE4, 0x7C,
  4.                  0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  5.                  0xB4, 0x5E, 0x9D, 0x0D, 0x88, 0x43, 0xB7, 0xAE, 0x27, 0xBD, 0x37, 0x5F, 0xB4, 0x22, 0xEB, 0x59,
  6.                  0xE7, 0x2D, 0x62, 0x6D, 0xF9, 0xEB, 0x8B, 0x9E, 0xB5, 0xF3, 0x0C, 0x9E, 0xCA, 0xF5, 0x6D, 0x7E,
  7.                  0x3C, 0xED, 0xF5, 0xBF, 0xD9, 0xB7, 0xFE, 0xC6, 0xFC, 0x2A, 0xFE, 0x46, 0xDF, 0xFD, 0xEF, 0xEB,
  8.                  0xFF, 0x8D, 0xD6, 0xB7, 0x7E, 0x6D, 0xFD, 0x27, 0xF8, 0xB7, 0xF3, 0xB7, 0xFE, 0xBE, 0xFC, 0x5F,
  9.                  0x11, 0x0B, 0xB8, 0x1C, 0x00, 0x00, 0xCC, 0xCC};

Пытаюсь раскодировать/декодировать массив данных:
Code:
  1. #include "zlib_/zlib.h"
  2. #pragma comment (lib, "zlib.lib")
  3.  
  4. #define SRC_SIZE 500
  5. #define DST_SIZE 500
  6.                  
  7. void main()
  8. {
  9.          unsigned char source[SRC_SIZE];
  10.          const unsigned long sourceLen = SRC_SIZE;
  11.          unsigned char dest[DST_SIZE];
  12.          unsigned long destLen = DST_SIZE;
  13.  
  14.          memset(source, 0, SRC_SIZE * sizeof(source[0]));
  15.          memcpy(source, test, 264);
  16.          printf("MEMCPY\n");
  17.  
  18.          FILE    *out        =      fopen("out.txt", "wb");
  19.  
  20.          unsigned char source2[SRC_SIZE];
  21.          const unsigned long sourceLen2 = SRC_SIZE;
  22.          unsigned char dest2[DST_SIZE];
  23.          unsigned long destLen2 = DST_SIZE;
  24.  
  25.          if (Z_OK == uncompress(dest2 , &destLen2, source, sourceLen))
  26.          {
  27.                  for (int i = 0; i < 264; i++) {
  28.                         printf("%02X-", dest2[i]);
  29.                  }
  30.          }
  31.          int err =        uncompress(dest2 , &destLen2, source, sourceLen);
  32.                  printf("\nError = %d\n", err);
  33.  
  34. system("pause");
  35. }

получаю ошибку -5 - #define Z_BUF_ERROR (-5)
Прошу вашей помощи.



Ранг: 61.5 (постоянный)
Статус: Участник

Создано: 25 июня 2020 18:39 New!
Цитата · Личное сообщение · #2

А как вы определяете размер раскодируемых данных? Обычно эта ошибка свидетельствует, что они не соответствуют

| Сообщение посчитали полезным: newbie_raw



Ранг: 253.5 (наставник)
Статус: Участник
radical

Создано: 25 июня 2020 19:02 New!
Цитата · Личное сообщение · #3

_MBK_ пишет:
А как вы определяете размер раскодируемых данных? Обычно эта ошибка свидетельствует, что они не соответствуют

Правильный вопрос. Здесь аут буффер 0х4000 байт ( по крайней мере у меня распаковалось именно столько).

| Сообщение посчитали полезным: newbie_raw


Ранг: 5.8 (гость)
Статус: Участник

Создано: 25 июня 2020 21:04 · Поправил: newbie_raw New!
Цитата · Личное сообщение · #4

_MBK_ пишет:
А как вы определяете размер раскодируемых данных?


DimitarSerg пишет:
Правильный вопрос. Здесь аут буффер 0х4000 байт ( по крайней мере у меня распаковалось именно столько).

Благодарю вас, вы правы и теперь вроде всё правильно за исключением того что проверить эту "правильность" не знаю как...)
Т.е. как проверить корректность декодированных данных подскажите пожалуйста программы (если таковые имеются)?




Ранг: 527.7 (!)
Статус: Участник
Победитель турнира 2010

Создано: 25 июня 2020 23:07 New!
Цитата · Личное сообщение · #5

newbie_raw пишет:
подскажите пожалуйста программы

https://static.old-games.ru/utils/GBS.rar

| Сообщение посчитали полезным: newbie_raw, -=AkaBOSS=-


Ранг: 5.8 (гость)
Статус: Участник

Создано: 26 июня 2020 01:25 · Поправил: newbie_raw New!
Цитата · Личное сообщение · #6

OKOB пишет:
https://static.old-games.ru/utils/GBS.rar

Спасибо OKOB, отличная программа!
To all, если не затруднит скажите возможную причину отображения данных в таком(прикладываю архив) виде?
{ Атач доступен только для участников форума } - im.zip



Ранг: 61.5 (постоянный)
Статус: Участник

Создано: 26 июня 2020 03:59 New!
Цитата · Личное сообщение · #7

Ваш архив не смотрел, но по анамнезу - вы неправильно указываете ширину изображения.
А, вообще говоря, для просмотра распакованных графических данных вовсе не обязательно искать раритетеые вьюверы. Фотошоп прекрасно умеет RAW, надо только правильно параметры задать.

| Сообщение посчитали полезным: newbie_raw


Ранг: 5.8 (гость)
Статус: Участник

Создано: 26 июня 2020 16:06 · Поправил: newbie_raw New!
Цитата · Личное сообщение · #8

_MBK_ пишет:
надо только правильно параметры задать.

В том и дело, что параметры (на скрине видно) указал правильные, но получается "обрезанное"(.



Ранг: 61.5 (постоянный)
Статус: Участник

Создано: 26 июня 2020 17:50 · Поправил: _MBK_ New!
Цитата · Личное сообщение · #9

Не совсем пойму что это такое, но у вас в текстовом файле (если брать за пиксел два соседних байта) длина строки 127 плюс символ перевода строки

Добавлено спустя 16 минут
Убрал переводы строк, открыл как RAW в фотошопе 2 канала 8 бит на канал 127x128

| Сообщение посчитали полезным: Rio


Ранг: 5.8 (гость)
Статус: Участник

Создано: 27 июня 2020 11:19 New!
Цитата · Личное сообщение · #10

_MBK_ пишет:
Убрал переводы строк, открыл как RAW в фотошопе 2 канала 8 бит на канал 127x128

Спасибо, всё правильно!
Спасибо всем!
Вопрос решён, тему закрываю.


 eXeL@B —› Программирование —› Раскодировать массив графических данных
Эта тема закрыта. Ответы больше не принимаются.

Видеокурс ВЗЛОМ