Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.08.2015, 09:22   #1
celvin
 
Регистрация: 22.05.2013
Сообщений: 7
По умолчанию Цвет изображения формата PNG

Есть некоторое изображение с цифрами, выводящееся на Image.
Смотрю цвет фона:
Код:
edt1.Text:= IntToStr(PNG.Canvas.Pixels[0,0]);
В ответ получаю 0, т.е. фон черный, а цифры синего оттенка. Если смотреть по Paint.net, то цвета так же, как на изображении.
Вопросы:
  1. На самом деле какого он все таки цвета? Это какая то особенность формата png?
  2. Если да, то как сделать, чтобы фон был черный, а цифры - синие?
Изображения
Тип файла: png 1.png (332 байт, 135 просмотров)
celvin вне форума Ответить с цитированием
Старый 06.08.2015, 11:43   #2
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Приложенное изображение - 4-битное. Конвертируйте ваш PNG в полноцветный BMP.
И кстати '#'+IntToHex(%, 8)
Цитата:
Если да, то как сделать, чтобы фон был черный, а цифры - синие?
Полагаю инвертировать и покрутить Hue.
ResourceSpace вне форума Ответить с цитированием
Старый 06.08.2015, 13:29   #3
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
В ответ получаю 0, т.е. фон черный, а цифры синего оттенка
почему 0 для фона - хз, а "синий оттенок" от того что тип пикселей у canvas, не RGBA, а BGRA, наверное.
конвертировать куда-то, на мой взгляд не к чему, особенно если в палитре 10 цветов.

Цитата:
На самом деле какого он все таки цвета?
фон белый. палитра ниже

0xffffffff
0xff2020bc
0xff192600
0xffe3e3f6
0xff7373d5
0xff3b3bc4
0xff5757cc
0xff8f8fdd
0xffababe5
0xffc7c7ee

Последний раз редактировалось f.hump; 06.08.2015 в 13:43.
f.hump вне форума Ответить с цитированием
Старый 06.08.2015, 13:52   #4
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
почему 0 для фона - хз, а "синий оттенок" от того что тип пикселей у canvas, не RGBA, а BGRA, наверное.
Все просто, там индексированный цвет и возвращается не RGB, а индекс, а по индексу уже нужно брать RGB из палитры.
x128 вне форума Ответить с цитированием
Старый 06.08.2015, 13:59   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
Все просто, там индексированный цвет и возвращается не RGB, а индекс, а по индексу уже нужно брать RGB из палитры.
я не спциалист Delphi, но как-то сильно сомневаюсь, что массив который называется Canvas.Pixels содержит не цвета, а индексы в палитру.
если это действительно индексы, то остается только доступ к палитре получить.

Последний раз редактировалось f.hump; 06.08.2015 в 14:05.
f.hump вне форума Ответить с цитированием
Старый 06.08.2015, 14:06   #6
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Цитата:
конвертировать куда-то, на мой взгляд не к чему, особенно если в палитре 10 цветов.
Мне обычно приходится всегда конвертировать. Хотя да, смотря что ему нужно.
Цитата:
Смотрю цвет фона:
Код:
edt1.Text:= IntToStr(PNG.Canvas.Pixels[0,0]);
Поковырялся в модуле, кароче вот как делай:
Код:
edt1.Text:='#'+IntToHex(PNG.Pixels[0,0],8);
Учитывает палитровое изображение или нет.
ResourceSpace вне форума Ответить с цитированием
Старый 06.08.2015, 17:53   #7
x128
Форумчанин
 
Регистрация: 03.02.2010
Сообщений: 178
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
я не спциалист Delphi, но как-то сильно сомневаюсь, что массив который называется Canvas.Pixels содержит не цвета, а индексы в палитру.
Каюсь, протупил, Canvas.Pixels действительно не может вернуть индекс, только при прямом доступе нужно учитывать формат пиксела.
x128 вне форума Ответить с цитированием
Старый 06.08.2015, 22:52   #8
celvin
 
Регистрация: 22.05.2013
Сообщений: 7
По умолчанию

Спасибо всем!
Действительно, при
Код:
edt1.Text:='#'+IntToHex(PNG.Pixels[0,0],8);
получаю значение формата RGB (если не напутал). А для получения BGR формата нужна конвертация в bmp?
celvin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кодек/декодер видео для изменения формата изображения Dizelektwo Общие вопросы C/C++ 1 25.06.2015 07:38
Обрезка Png изображения XE5 Общие вопросы Delphi 3 31.03.2014 07:54
Обнаружить края PNG изображения с прозрачным фоном FumarMata JavaScript, Ajax 2 09.01.2014 16:55
Зуммирование изображения формата PNG. sasha77 Помощь студентам 0 06.06.2012 10:09
Как уменьшить размер PNG изображения? highklass Мультимедиа в Delphi 5 31.05.2008 16:24