Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Представление цвета пикселей в Билдере...

1.8K
02 ноября 2005 года
Andreww
81 / / 02.01.2004
Прежде всего скажу спасибо Anton S. за помощь в анализе битмапа. Проект потихооооньку двигается :-)

В процессе работы с битмапами выяснилось, что если я хочу узнать цвет пиксела то нужно использовать конструкцию типа
int Color = pic->Canvas->Pixels[j]
В результате цвет будет получен в виде восьмизначного числа которое представляет собой:
Непонятный_БайтBGR. То есть например так: 11382189
Здесь 38-21-89 – это B-G-R, а что такое этот загадочный байт «11»??? Я читал хелп, но там не ясно для меня написано :-(

И еще – хотелось бы максимально отвязать свою софтину от среды разработки, и поэтому не использовать Билдеровские функции по работе с графикой. Может кто работал с битмапами вручную? Интересует простейшая библиотека рассчитанная только на bmp файлики. В инете полно open-source библиотек то для моего проекта они просто мега-сложные - это как на самолете в булочную летать :-):-)
299
03 ноября 2005 года
3D Bob
885 / / 18.04.2005
Вообще-то, насчет этого...
Цитата:
int Color = pic->Canvas->Pixels[j]


правильней будет так

Цитата:
TColor Color = pic->Canvas->Pixels[j]


Но не суть, преобразования позволяют это пихать в тип Интегер.

Далее ты не прав.
Это полнейшая сказка сивой кабылы.

Цитата:
Непонятный_БайтBGR. То есть например так: 11382189
Здесь 38-21-89 – это B-G-R, а что такое этот загадочный байт «11»??? Я читал хелп, но там не ясно для меня написано :-(


Все не так просто.
Чтобы реально узнать R G B
тебе нужно этот код закинуть например в калькулятор и заставить отобраззить его в шестнадцатеричной форме.
У тебя получится
ADADAD
Вот
AD - B
AD - G
AD - R


Чтобы отказаться от VCL...
[color=red](кстати

Цитата:
pic->Canvas->Pixels[j]

Это уже VCL)[/color]
тебе нужно заюзать API GDI
Вот помощь.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/wingdistart_9ezp.asp

Удачи.

1.8K
03 ноября 2005 года
Andreww
81 / / 02.01.2004
Спасибо. Но хотелось бы узнать подробнее о манипуляциях с цветом – мне нужно анализировать нехилые картинки и посему если закидывать каждый пиксел в калькулятор то до пенсии может и посчитаю ;-)

Я лучше конкретно расскажу что надо сделать. Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного). Пользователь выбирает ползунком порог (устанавливает уровень серого). Моя прога должна все что находится ниже заданного порога отбросить, а все что выше - обработать.

Теперь вопрос: как манипулировать с этим 8-ми цифровым значением цвета в своей программе? Например как прикрутить число такого типа к ползунку и менять его от черного до белого - всего 256 градаций? Все пикселы у меня только серые (то есть каналы RGB имеют одинаковую.... инттенсивность что-ли...) Цветных нет!
299
03 ноября 2005 года
3D Bob
885 / / 18.04.2005
Цитата:
Originally posted by Andreww
Спасибо. Но хотелось бы узнать подробнее о манипуляциях с цветом – мне нужно анализировать нехилые картинки и посему если закидывать каждый пиксел в калькулятор то до пенсии может и посчитаю ;-)

Я лучше конкретно расскажу что надо сделать. Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного). Пользователь выбирает ползунком порог (устанавливает уровень серого). Моя прога должна все что находится ниже заданного порога отбросить, а все что выше - обработать.

Теперь вопрос: как манипулировать с этим 8-ми цифровым значением цвета в своей программе? Например как прикрутить число такого типа к ползунку и менять его от черного до белого - всего 256 градаций? Все пикселы у меня только серые (то есть каналы RGB имеют одинаковую.... инттенсивность что-ли...) Цветных нет!



Все очень просто. Тебе просто нужно использовать шестнадцатеричную систему.

pic->Canvas->Pixels[j] = TColor(0x00DDDDDD);

13K
03 ноября 2005 года
fcxSanya
11 / / 31.10.2005
Цитата:
Originally posted by Andreww
Имеются серо-бело-черные картинки (могут быть в абсолютно разных bmp-форматах от grayscale до 24 битного)



А зачем делать 24-битную "серо-бело-черную" картинку? У нее значения байтов RGB будут одинаковые, как ты сам выразился

Цитата:
каналы RGB имеют одинаковую.... инттенсивность что-ли...



Чтобы получить цвет по значениям RGB есть какая-то функция, но вообще она нафиг не нужна, вот так:
Color = R + (G<<8) + (B<<16);
получается цвет, а так:
R = Color&0x0000ff;
G = Color&0x00ff00; G>>= 8;
B = Color&0xff0000; B>>=16;

из цвета получаются его оттенки. Можешь конечно и умножением/делением этого добится но логические операции значительно быстрее работают.

10
03 ноября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by fcxSanya
Можешь конечно и умножением/делением этого добится но логические операции значительно быстрее работают.


Если верить MSDN, специально для работы с цветом определены макросы:

 
Код:
The following macros are used with color.

GetBValue
GetGValue
GetRValue
PALETTEINDEX
PALETTERGB
RGB
13K
03 ноября 2005 года
fcxSanya
11 / / 31.10.2005
Цитата:
Originally posted by Freeman
Если верить MSDN, специально для работы с цветом определены макросы



Макросы это конечно хорошо, но вручную оно как-то и возможности вроде пошире, и механизм понятен, а макросы вобщем-то то же самое делают. Поэтому некоторые простые вещи по-моему лучше самому писать, чем каждый раз лезть в справку за нужным макросом, или хотя бы знать на чем это основано. Или я не прав?

10
03 ноября 2005 года
Freeman
3.2K / / 06.03.2004
Цитата:
Originally posted by fcxSanya
Поэтому некоторые простые вещи по-моему лучше самому писать, чем каждый раз лезть в справку за нужным макросом, или хотя бы знать на чем это основано. Или я не прав?


Если макросы делают то же самое, то лезть за ними нужно только для того, чтобы понять, что же они на самом деле делаю, и как. А в остальном - совместимость, однако. Например, если завтра появится работа с 48- или 64-битным цветом? Код переписывать будете? Или все-таки легче несколько макросов заменить?

13K
03 ноября 2005 года
fcxSanya
11 / / 31.10.2005
Цитата:
Originally posted by Freeman
Если макросы делают то же самое, то лезть за ними нужно только для того, чтобы понять, что же они на самом деле делаю, и как. А в остальном - совместимость, однако. Например, если завтра появится работа с 48- или 64-битным цветом? Код переписывать будете? Или все-таки легче несколько макросов заменить?



Ну, ладно, согласен, возьму на заметку.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог