|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Яркость пикселя Grayscale BMP
Прошу помощи в в решении следующего вопроса:
имеется bmp изображение в градациях серого, соответсвтенно, с уровнями яркости в диапазоне 0..255. Мне нужно получить массив пикселей этого изображения (для дальнейшей фильтрации). Подскажите как это реализуется именно для изображения в градациях серого? В Интернете полно вариантов перевода RGB to Grayscale. Там применяется формула: Y=0.3*R+0.59*G+0.11*G Однако, у меня уже используется изображение в градациях серого, будет ли справедливо это выражение? Я решил проверить экспериментально: b:=Image1.Picture.Bitmap.Canvas.Pixels[0,0]; Переменная b = 3026478, соответственно R=78,G=64,B=02 Получается Y=61.38 Проверяю в фотошопе левый верхний пиксель, пишет 46. В общем, надеюсь на Вашу помощь. Извиняюсь за много буков - хотел подробнее описать проблему. |
#2
|
||||
|
||||
Если ты его грузишь в "Дельфийский" TBitMap или TImage, то там формат сам по себе RGB. Соответственно, из модуля Windows есть 3 ф-ции:
Код:
GetRValue GetGValue GetBValue возвращают значения красного, зеленого и синего цветов из TColor (cardinal) которым является Код:
Image1.Picture.Bitmap.Canvas.Pixels[X,Y] |
#3
|
|||
|
|||
если оно в градациях серого, там все три R,G,B должны быть равны между собой и равны тому значению Y
>woweook< |
#4
|
|||
|
|||
Чтобы не быть голословным, прикладываю пример картинки: http://narod.ru/disk/60045859001.942...779/1.bmp.html
Применив к этой картинке b:=Image1.Picture.Bitmap.Canvas.Pixels[0,0]; снова получаю b = 3026478. |
#5
|
||||
|
||||
302647810 = 2E2E2E16
2E16 = 4610 Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
Этот пользователь сказал Спасибо PhoeniX за это полезное сообщение: | ||
ivandobsky (28.08.2012)
|
#6
|
||||
|
||||
Цитата:
Правильно. И, например, сделав так: Код:
begin caption:=format('%d, %d, %d',[getRValue(3026478),getGValue(3026478),getBValue(3026478) ]); end; end; |
Этот пользователь сказал Спасибо YVitaliy за это полезное сообщение: | ||
ivandobsky (28.08.2012)
|
#7
|
||||
|
||||
Цитата:
Пишу программы за еду. __________________ |
#8
|
|||
|
|||
А какой PixelFormat у этой картинки?
А то через scanLine будет а) удобнее и б) быстрее (особенно, если картинка большая). |
#9
|
|||
|
|||
Большое спасибо всем за оперативную помощь. Не знал, что проблема может заключаться в системе исчисления, нигде не попадалось на это намека.
lmikle, спасибо за совет. Почитаю про scanLine, попробую. |