Здравствуйте, гость ( Вход | Регистрация )

  • Страница 1 из 1
  • 1
Вопросы по Bitmap2Code
ZoomerJuk Среда, 23.05.2012, 21:39 | Сообщение # 1
Кто здесь?
Группа: Проверенные
Сообщений: 3
Статус: Offline
Доброго времени суток!
Пытаюсь разобратся с программой, не могу понять результат ее работы.
Имеется картинка в 8-и битном цвете.
Нужно перевести ее в код для дисплея в 16-и битном цвете, словами 8 бит.

Кусок кода не сжатой картинки:
Code
0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  


имеем 41 пиксель синего цвета.

Этот же кусок кода сжатой:
Code
0x81,  0x0,  0x52,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,  0x0,  0x1f,    
   0x0,  0x1f,  0x0,  0x1f,  


В результате сжатие выходит с 3344 до 2340.
Почему так?
Получается, в не сжатом коде один пиксель кодирован 2 байтами, а компрессор считает каждый байт как отдельный цвет?

И еще, не работает вызываемая из контекста функция Copy, только Ctrl+C.


Сообщение отредактировал ZoomerJuk - Среда, 23.05.2012, 21:41  
 
LeftRadio Среда, 06.06.2012, 22:49 | Сообщение # 2
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Лучше ответить поздно чем никогда :) , просто как то не заметил темы. Если Вы выбираете кодирование в 16-ти битном цвете, но 8 бит данные, то без сжатия программа разложит каждый пиксель на два байта, с сжатием да, считается что каждый байт это свой цвет, так как сжатие происходит после полного преобразования изображения в массив, спасибо что обратили внимание на это, постараюсь исправить тем более сам ею постоянно пользуюсь :) Copy тоже исправлю, просто все лень , да и Ctrl+C работает, также можно просто сохранить файлами.

---

Нет войне!


Сообщение отредактировал LeftRadio - Среда, 06.06.2012, 23:02  
 
ZoomerJuk Понедельник, 11.06.2012, 08:46 | Сообщение # 3
Кто здесь?
Группа: Проверенные
Сообщений: 3
Статус: Offline
Я немного попыхтел над кодом (спасибо, что исхсходники доступны), получил нужный результат. Правда на сколько профессионально и безглючно получилось не знаю :)
Но пробовал сжимать для своего проектика - все работает. Вот измененный файл RLE_Compress.cs
Прикрепления: RLE_Compress.cs (4.0 Kb)
 
LeftRadio Вторник, 12.06.2012, 10:20 | Сообщение # 4
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Спасибо за исправления :) Программа и сама написана достаточно просто и без изысков, так что не беспокойтесь по поводу профессиональности :) Я умышленно пытался написать как можно проще, пусть и возможно не все оптимально. Попробую Ваши исправления, как я понял теперь сжатие при конвертации 16бит цвета и по 8бит данные определяет 2 байта за один цвет, а как если сжимать 8бит цвет к примеру? Сейчас посмотрю исправленный код и позже откомпилирую проверю.

---

Нет войне!


Сообщение отредактировал LeftRadio - Вторник, 12.06.2012, 10:40  
 
ZoomerJuk Среда, 13.06.2012, 13:04 | Сообщение # 5
Кто здесь?
Группа: Проверенные
Сообщений: 3
Статус: Offline
Для пробы нужно заменить существующий файл на мой, запустить программу и в настройках изменить out color - 16bit, ну и отметить rle compression.

Думаю с 8-битными не получится, т.к. в программе идет попарная обработка данных. Я когда переделал, хотел поступить так: добавить в форму чек-бокс, RLE_Compress.cs слепить из вашего и моего, если отмечен чек-бокс, работает мой код, если нет - ваш.
 
  • Страница 1 из 1
  • 1
Поиск:
uTmpl.ru Сайт создан в системе uCoz Сейчас: 23.12.2024, 15:57