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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 09:32   #1
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию Неверно распознается цвет пикселя

Есть картинка, загруженная в TImage, изначальный формат .bmp.
Требуется вычислить код определенного пикселя, в моем случае по координатам [684, 6].
Код:
Color := Image1.Picture.Bitmap.Canvas.Pixels[684, 6];
Edit1.Text := ColorToString(Color);
Проблема в том, что делфя выдает код $00EC0E01 - это красный.
А пиксель на самом деле синий, с кодом #0008CD (определено в фотошопе), а красного на картинке нет вообще.
Почему так?
Риндера вне форума Ответить с цитированием
Старый 30.08.2011, 11:18   #2
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Бывает штука DIB, где порядок цвета не RGB а BGR. И исчо может руки такие.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 30.08.2011, 11:27   #3
Риндера
Delphi, учу С
Форумчанин
 
Аватар для Риндера
 
Регистрация: 20.10.2010
Сообщений: 178
По умолчанию

Была мысль, что порядок BGR, и получается тоже синий, но не точно такой же, что странно. Но очень близкий.

В принципе делфи воспринимает его как синий, так что если не вдаваться в дизайнерские подробности, то всё ок ))
Но всё-равно интересно.
Риндера вне форума Ответить с цитированием
Старый 02.09.2011, 20:09   #4
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

мне вот еще интересно, если цвет задается с помощью FF FF FF, то какого "$00 EC 0E 01" ?
допустим три из этих пар символов задают цвет RGB (BGR), зачем тогда четвертая пара?
не прозрачность же она задает...
xrob вне форума Ответить с цитированием
Старый 02.09.2011, 20:13   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если битмап 24-битный то она вообще откидывается.
а если 32-битный формата RGBX то просто не используется.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.09.2011, 20:14   #6
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Именно прозрачность. Так сказать Альфа-канал. Даже если не нужен альфа-канал, то всё равно 24 битный цвет пакуется в 32 бита, где старший байт ничего не значит.
Таково устройство процессоров x86 (32 битных), которые шустрее работают с 32 битными данными чем, скажем, с 8 битными.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.

Последний раз редактировалось notHaker; 02.09.2011 в 20:17.
notHaker вне форума Ответить с цитированием
Старый 02.09.2011, 20:28   #7
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

никогда не поверю, что у цвета может быть прозрачность о_О
у пикселя - да, но не у цвета...

"откидывается", "не используется", "Таково устройство процессоров"...
я понял. проще умножить на 10, чем на 9, да?

кстати, про 32-битный битмап...
на каждый пиксел такого битмапа приходится 4 byte
по логике, 3 из них - это RGB, а четвертый - Alpha. (или нет?)
но на практике у меня среднее значение альфы
не приводило к полупрозрачности пиксела битмапа...
pf32bit. изменял через ScanLine.
измененный битмап отрисовывал на форме - Cnvas.Draw .

что не так?
xrob вне форума Ответить с цитированием
Старый 02.09.2011, 20:57   #8
notHaker
Форумчанин
 
Аватар для notHaker
 
Регистрация: 01.12.2009
Сообщений: 569
По умолчанию

Цитата:
Cnvas.Draw
Не умеет винда стандартными средствами GDI рисовать с полупрозрачностью. Тебе в GDI+.
Код - это работа, а работа стоит денег.

pz-game.ru. 2d зомби-сурвивал для олдфагов.
notHaker вне форума Ответить с цитированием
Старый 02.09.2011, 23:33   #9
xrob
Форумчанин
 
Регистрация: 18.10.2010
Сообщений: 419
По умолчанию

да ну?
а почему я тогда на Canvas.Draw PNG спокойно отрисовываю с любой прозрачностью?
PNG с прозрачностью рисует, а Bitmap - нет.
xrob вне форума Ответить с цитированием
Старый 03.09.2011, 00:13   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну PNGImage на это рассчитано естественно.
битмапы в GDI считаются(если 32 бита) как RGBX.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить цвет пикселя? prw07 Мультимедиа в Delphi 1 31.08.2010 13:06
Узнать цвет пикселя. sergeyrulit Общие вопросы Delphi 6 02.07.2010 11:55
Как определить цвет пикселя? zotox Общие вопросы Delphi 2 15.11.2009 19:05
Цвет пикселя неактивного окна. GrindeX Общие вопросы Delphi 2 08.11.2009 16:10
определить цвет каждого пикселя Dimarik Общие вопросы C/C++ 4 17.08.2009 16:21