Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Изменение цвета 
:(
    Опции темы
artsb
  Дата 30.9.2007, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



У меня в Image'е есть картинка. Как программно заменить какой-нибудь цвет и его оттенки на другой цвет?


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Klin
Дата 30.9.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Должно быть свойство или функция, но пока не вспомню, поэтому можно через циклы исккать нужный цвет и заменять его.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
smoke_man
Дата 30.9.2007, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Один из методов:
Код

for(int i=0;i<Image1->Width;i++)
for(int j=0;j<Image1->Height;j++)
     if(Image1->Canvas->Pixels[i][j]==clRed)
               Image1->Canvas->Pixels[i][j]=clGreen;

Заменяем весь красный цвет на зеленый.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
smoke_man
Дата 30.9.2007, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Более быстрый способ следующий:

Создаем структуру такого типа:
Код


typedef struct
{
    char B,
            G,
            R;
}TCol;


Затем делаем следующий поиск:
Код


   TCol *col;
  //Устанавливаем цветность
   Image1->Picture->Bitmap->PixelFormat = pf24bit;
   for(int i=0;i<Image1->Picture->Bitmap->Height;i++)
   {
      //Считываем строку
     //Возвращает не RGB а BGR
       col=(TCol*)(Image1->Picture->Bitmap->ScanLine[i]);
      //анализируем строку
        for(int j=0;j<Image1->Picture->Bitmap->Width;j++)
            if(RGB(col[j].R,col[j].G,col[j].B)==clGreen)
            {
                //Задаем новую цветность
                col[j].R =255;
                col[j].G=0;
                col[j].B=0;
            }
   }
   //Делаем перерисовку
   Image1->Invalidate();




--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
artsb
Дата 1.10.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Спасибо, попробую. Хочу обратить внимание, что если я меняю синий на красный, то и оттенки синего нужно поменять на оттенки красного. Насколько я знаю это делается с помощью RGB.

smoke_man объясни плиз вот эту строку:

col=(TCol*)(Image1->Picture->Bitmap->ScanLine[i]);

По-подробнее.

Как можно слелать пиксель прозрачным? Спс.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Cheater
Дата 1.10.2007, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.2.2007
Где: Петропавловск-Кам чатский

Репутация: нет
Всего: нет



>col=(TCol*)(Image1->Picture->Bitmap->ScanLine[i]); 
Это приведение Bitmap->ScanLine[i] к типу TCol*.

Прозрачных пикселей в Bitmap не бывает. 

PM MAIL ICQ   Вверх
smoke_man
Дата 1.10.2007, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 9
Всего: 17



Цитата

smoke_man объясни плиз вот эту строку:

col=(TCol*)(Image1->Picture->Bitmap->ScanLine[i]);


В BCB нет структуры типа BGR(а не RGB), а  ScanLine возвращает ссылку на массив BGR типов...вот этой строкой я и привожу ее к своему созданному типу TCol, т.е к BGR, а дальше можешь просто сравнивать не полный цвет, а работать с каждой компонентой в отдельности.


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
artsb
Дата 1.10.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



smoke_man спасибо.

Cheater я не имел ввиду Bitmap.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Cheater
Дата 2.10.2007, 02:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.2.2007
Где: Петропавловск-Кам чатский

Репутация: нет
Всего: нет



artsb, Image1->Picture->Bitmap->ScanLine[i] - это, по вашему, не Bitmap?
PM MAIL ICQ   Вверх
artsb
Дата 2.10.2007, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Cheater но в Image можно загрузить и *.jpg. И темболее когда на кнопку ложишь картинку и ставишь Transparent=true, она битмаповская.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Cheater
Дата 3.10.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.2.2007
Где: Петропавловск-Кам чатский

Репутация: нет
Всего: нет



Там используются не прозрачные пиксели... 
PM MAIL ICQ   Вверх
artsb
Дата 3.10.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Ну тогда объясни, что там используется. плиз.



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
artsb
Дата 15.10.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Не получается что-то.
Выкладываю картинку. Нужно из левой части картинки получить правую.
Но это пример, а вообще цвет будет выбирать пользователь.
Может кто знает как такое сделать.


Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  example.jpg 27,42 Kb


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.