![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Neighbour |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Доброго времени суток, господа.
Пишу (пытаюсь Возникает ряд вопросов, некоторые оч. тупые. Просто получилось совмещение изучения Delphi с написанием такой (на мой взгляд для новичка не простой) программы. Но делать нечего.... Порыскал по поисковикам, почитал книжки, умыкнул куски кода 1. Преобразование изображения в оттенки серого
Все работает, но непонятно что делает
без него отказывается работать Кто-нибудь на пальцах про указатель на массив (да и просто про указатели) рассказать может? А то что скрывается за
для меня остается не то чтобы совсем непонятным, но чисто интуитивно догадываюсь. 2. В вышеуказанном примере изображение меняется так сказать "на лету". А если нужно наложить фильтр (или вычислить среднее значение яркости или еще чего) как организовать хранение промежуточного изображения? В общем, если можно, какую-нибудь заготовочку с пояснениями или пример хороший с пояснениями же. Т.е. с логикой я справлюсь, а вот техническая реализация для меня сложновата. Может быть вопросы изложены слишком сумбурно, но, поверьте, сформулировать поточнее то, о чем лишь догадываешься сложновато. В общем, приму любые советы по организации программы. Заранее благодарен. |
||||||
|
|||||||
| Alexeis |
|
||||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Попробуй заменить ее на Image1.Picture.Bitmap.PixelFormat := Pf24Bit; Т.е. указать явное преобразование из аппаратно зависимого растра в Dib секцию (прямая адресация картинки можно только для Dib секции)
Непрерывный участок памяти можно представить в виде массива. Фактически адресация элемента массива это ни что иное как сдвиг адреса первого элемента на индекс элемента умноженный на размер типа. В памяти пиксели идут один за другим, потому если указатель привести к массиву то так удобнее обращаться Сумбурно. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
красивше так
по второму - храни исходное изображение в битмапе, работу проводи над буфером (второй битмап). |
|||
|
||||
| Neighbour |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
Не работает сволочь... Еще вопросик. Как сделать максимальную Saturation в HSL представлении? Допустим, текущую насыщенность пикселя я вычислю S = sqrt(R*R+G*G+B*B-R*G-R*B-G*B), Как вычислить новые R G B при которых S была бы максимальноЙ? |
|||
|
||||
| Neighbour |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.3.2006 Репутация: нет Всего: нет |
В продолжение темы:
Делаю RGB->HSL->Saturation Max->RGB.
Готов, как видите, лишь перевод из RGB в HSL. Алгоритм взят с easyrgb.com var_R = ( R / 255 ) //RGB from 0 to 255 var_G = ( G / 255 ) var_B = ( B / 255 ) var_Min = min( var_R, var_G, var_B ) //Min. value of RGB var_Max = max( var_R, var_G, var_B ) //Max. value of RGB del_Max = var_Max - var_Min //Delta RGB value L = ( var_Max + var_Min ) / 2 if ( del_Max == 0 ) //This is a gray, no chroma... { H = 0 //HSL results from 0 to 1 S = 0 } else //Chromatic data... { if ( L < 0.5 ) S = del_Max / ( var_Max + var_Min ) else S = del_Max / ( 2 - var_Max - var_Min ) del_R = ( ( ( var_Max - var_R ) / 6 ) + ( del_Max / 2 ) ) / del_Max del_G = ( ( ( var_Max - var_G ) / 6 ) + ( del_Max / 2 ) ) / del_Max del_B = ( ( ( var_Max - var_B ) / 6 ) + ( del_Max / 2 ) ) / del_Max if ( var_R == var_Max ) H = del_B - del_G else if ( var_G == var_Max ) H = ( 1 / 3 ) + del_R - del_B else if ( var_B == var_Max ) H = ( 2 / 3 ) + del_G - del_R if ( H < 0 ) ; H += 1 if ( H > 1 ) ; H -= 1 } Компилятор выдает, что значение переменной S never used и она равна 0 при любом условии, а переменной H может быть не определено. Где у меня ошибка, подскажите, пожалуйста. Это сообщение отредактировал(а) Neighbour - 27.11.2008, 23:21 |
|||
|
||||
| AntonN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 3 Всего: 18 |
если не выполнится условие
то Н будет неопределено |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 34 Всего: 459 |
Модератор: Пожалуйста, один топик - один вопрос.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |