Представление цвета пикселей в Билдере...
В процессе работы с битмапами выяснилось, что если я хочу узнать цвет пиксела то нужно использовать конструкцию типа
int Color = pic->Canvas->Pixels[j]
В результате цвет будет получен в виде восьмизначного числа которое представляет собой:
Непонятный_БайтBGR. То есть например так: 11382189
Здесь 38-21-89 – это B-G-R, а что такое этот загадочный байт «11»??? Я читал хелп, но там не ясно для меня написано :-(
И еще – хотелось бы максимально отвязать свою софтину от среды разработки, и поэтому не использовать Билдеровские функции по работе с графикой. Может кто работал с битмапами вручную? Интересует простейшая библиотека рассчитанная только на bmp файлики. В инете полно open-source библиотек то для моего проекта они просто мега-сложные - это как на самолете в булочную летать :-):-)
правильней будет так
Но не суть, преобразования позволяют это пихать в тип Интегер.
Далее ты не прав.
Это полнейшая сказка сивой кабылы.
Здесь 38-21-89 – это B-G-R, а что такое этот загадочный байт «11»??? Я читал хелп, но там не ясно для меня написано :-(
Все не так просто.
Чтобы реально узнать R G B
тебе нужно этот код закинуть например в калькулятор и заставить отобраззить его в шестнадцатеричной форме.
У тебя получится
ADADAD
Вот
AD - B
AD - G
AD - R
Чтобы отказаться от VCL...
[color=red](кстати
Это уже VCL)[/color]
тебе нужно заюзать API GDI
Вот помощь.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/wingdistart_9ezp.asp
Удачи.
Я лучше конкретно расскажу что надо сделать. Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного). Пользователь выбирает ползунком порог (устанавливает уровень серого). Моя прога должна все что находится ниже заданного порога отбросить, а все что выше - обработать.
Теперь вопрос: как манипулировать с этим 8-ми цифровым значением цвета в своей программе? Например как прикрутить число такого типа к ползунку и менять его от черного до белого - всего 256 градаций? Все пикселы у меня только серые (то есть каналы RGB имеют одинаковую.... инттенсивность что-ли...) Цветных нет!
Спасибо. Но хотелось бы узнать подробнее о манипуляциях с цветом – мне нужно анализировать нехилые картинки и посему если закидывать каждый пиксел в калькулятор то до пенсии может и посчитаю ;-)
Я лучше конкретно расскажу что надо сделать. Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного). Пользователь выбирает ползунком порог (устанавливает уровень серого). Моя прога должна все что находится ниже заданного порога отбросить, а все что выше - обработать.
Теперь вопрос: как манипулировать с этим 8-ми цифровым значением цвета в своей программе? Например как прикрутить число такого типа к ползунку и менять его от черного до белого - всего 256 градаций? Все пикселы у меня только серые (то есть каналы RGB имеют одинаковую.... инттенсивность что-ли...) Цветных нет!
Все очень просто. Тебе просто нужно использовать шестнадцатеричную систему.
pic->Canvas->Pixels[j] = TColor(0x00DDDDDD);
Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного)
А зачем делать 24-битную "серо-бело-черную" картинку? У нее значения байтов RGB будут одинаковые, как ты сам выразился
Чтобы получить цвет по значениям RGB есть какая-то функция, но вообще она нафиг не нужна, вот так:
Color = R + (G<<8) + (B<<16);
получается цвет, а так:
R = Color&0x0000ff;
G = Color&0x00ff00; G>>= 8;
B = Color&0xff0000; B>>=16;
из цвета получаются его оттенки. Можешь конечно и умножением/делением этого добится но логические операции значительно быстрее работают.
Можешь конечно и умножением/делением этого добится но логические операции значительно быстрее работают.
Если верить MSDN, специально для работы с цветом определены макросы:
GetBValue
GetGValue
GetRValue
PALETTEINDEX
PALETTERGB
RGB
Если верить MSDN, специально для работы с цветом определены макросы
Макросы это конечно хорошо, но вручную оно как-то и возможности вроде пошире, и механизм понятен, а макросы вобщем-то то же самое делают. Поэтому некоторые простые вещи по-моему лучше самому писать, чем каждый раз лезть в справку за нужным макросом, или хотя бы знать на чем это основано. Или я не прав?
Поэтому некоторые простые вещи по-моему лучше самому писать, чем каждый раз лезть в справку за нужным макросом, или хотя бы знать на чем это основано. Или я не прав?
Если макросы делают то же самое, то лезть за ними нужно только для того, чтобы понять, что же они на самом деле делаю, и как. А в остальном - совместимость, однако. Например, если завтра появится работа с 48- или 64-битным цветом? Код переписывать будете? Или все-таки легче несколько макросов заменить?
Если макросы делают то же самое, то лезть за ними нужно только для того, чтобы понять, что же они на самом деле делаю, и как. А в остальном - совместимость, однако. Например, если завтра появится работа с 48- или 64-битным цветом? Код переписывать будете? Или все-таки легче несколько макросов заменить?
Ну, ладно, согласен, возьму на заметку.