Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.08.2012, 17:27   #1
bagabuga
Пользователь
 
Регистрация: 27.11.2010
Сообщений: 18
По умолчанию Замена цвета.

Подскажите, пожалуйста, каким образом можно заменить на изображении ВСЕ оттенки белого, на чисто зеленый или любой другой, а затем все оттенки черного на чисто белый.

Например:

Оттенки черного:
$00272727
$00050306
$00040205

Оттенки белого:
$00fffcff
$00b6afb6
$00bbb4bb

Ясно, что их огромное количество и все писать и заменять не будешь. Как это можно сделать быстро?
bagabuga вне форума Ответить с цитированием
Старый 20.08.2012, 18:36   #2
Sm1Le
Форумчанин
 
Аватар для Sm1Le
 
Регистрация: 31.10.2008
Сообщений: 500
По умолчанию

Цитата:
Сообщение от bagabuga Посмотреть сообщение
Подскажите, пожалуйста, каким образом можно заменить на изображении ВСЕ оттенки белого, на чисто зеленый или любой другой, а затем все оттенки черного на чисто белый.

Например:

Оттенки черного:
$00272727
$00050306
$00040205

Оттенки белого:
$00fffcff
$00b6afb6
$00bbb4bb

Ясно, что их огромное количество и все писать и заменять не будешь. Как это можно сделать быстро?
загрузить изображение в canvas, далее бегая по каждому пикселю (двумерный массив), при помощи двух цыклов, пройти все и сравнить на нужное, вдруг что заменить.


Код:
procedure TForm1.Button1Click(Sender: TObject);

var  x,y,x1,y1: integer;
     c: TColor;
     r,g,b: byte;
     r1,g1,b1: byte;
     r2,g2,b2: byte;
     t: real;
begin

  panel1.doublebuffered:=true;
  for x:=0 to Image2.Width-1 do
  begin
     t := 1/2;
     if image1.width<y then
       y1:=y-image1.width;
     for y:=0 to Image2.Height-1 do
     begin
       if image1.Height<x then
           x1:=x-image1.Height;


       c := Image1.Canvas.Pixels[x1,y1];
       r1 := (c and $0000FF);
       g1 := (c and $00FF00) shr 8;
       b1 := (c and $FF0000) shr 16;

       c := Image2.Canvas.Pixels[x,y];
       r2 := (c and $0000FF);
       g2 := (c and $00FF00) shr 8;
       b2 := (c and $FF0000) shr 16;
       r := round( t*r1 + (1-t)*r2 );
       g := round( t*g1 + (1-t)*g2 );
       b := round( t*b1 + (1-t)*b2 );
       Image2.Canvas.Pixels[x,y] := r + g shl 8 + b shl 16
     end;
     Image2.update;
   end;
end;

это кусок кода из инета ... ) Я думаю ты поймешь ... здесь накладываться рисунок1 на рисунок 2 ... но смысл тот же.
Skype : UASm1Le.
Sm1Le вне форума Ответить с цитированием
Старый 21.08.2012, 05:26   #3
bagabuga
Пользователь
 
Регистрация: 27.11.2010
Сообщений: 18
По умолчанию

Спасибо за помощь! Сделал!
bagabuga вне форума Ответить с цитированием
Старый 21.08.2012, 08:21   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

Извиняюсь, а зачем работать с довольно медленным GUI?
Можно же создать буфер, в нем и работать...

Код:
BMB: TBitmap;
BMP := TBitmap.Create;
BMP.Width := 100; // нужное
BMP.Height := 100; // Нужное
//Делаем что нужно с цветами и выводим куда необходимо.
BMP.Free;
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 21.08.2012, 09:05   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

надо в принципе забыть про Pixels, а вспомнить про Scanline.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена одного цвета в Image на другой KREGI Мультимедиа в Delphi 13 09.06.2012 18:05
Замена цвета в bitmap'е на другой new_newbie Помощь студентам 3 26.04.2011 18:59
Цвета darklagger Паскаль, Turbo Pascal, PascalABC.NET 5 26.04.2011 16:53
Замена цвета image beemoto Мультимедиа в Delphi 6 17.11.2009 20:22
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52