Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.03.2011, 22:02
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию Цвета пикселов

Есть цвет определённого пиксела на экране. Как мне относительно этого пиксела найти пикселы на экране у которых цвет не сильно отличается от данного, но разумеется оличается??????????
Ответить с цитированием
  #2  
Старый 01.04.2011, 00:04
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

1. Разложить цвет на R,G и B составляющие (shr, and).
2. Пробегаться по всем пикселам (лучше всего юзать Scanline).
3. Ставишь
Код:
(abs(aR-bR)<10)and(abs(aG-bG)<10)and(abs(aB-bB)<10)
или сколько тебе надо.
4. делаешь что хочешь.
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 01.04.2011, 14:21
Аватар для Zolman
Zolman Zolman вне форума
Новичок
 
Регистрация: 19.11.2009
Сообщения: 70
Репутация: 10
По умолчанию

А можно более чёткий пример пожалуйста!!!
Ответить с цитированием
  #4  
Старый 01.04.2011, 15:35
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Код:
procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var i, j:       Byte;
    aR, aG, aB: Byte;
    bR, bG, bB: Byte;
    NeSilOtlich:Byte;
    x1,x2,y1,y2:integer;
begin
Image2.Picture:=nil;
NeSilOtlich:=15;
aR:=GetRValue(Image1.Canvas.Pixels[x,y]);
aG:=GetGValue(Image1.Canvas.Pixels[x,y]);
aB:=GetBValue(Image1.Canvas.Pixels[x,y]);
x1:=1;
y1:=1;
x2:=x1+8;
y2:=8;
for i:=1 to Image1.Width do
  for j:=1 to Image1.Height do
    begin
      bR:=GetRValue(Image1.Canvas.Pixels[i,j]);
      bG:=GetGValue(Image1.Canvas.Pixels[i,j]);
      bB:=GetBValue(Image1.Canvas.Pixels[i,j]);
      if (abs(aR-bR)<NeSilOtlich)and(abs(aG-bG)<NeSilOtlich)and(abs(aB-bB)<NeSilOtlich) then
        begin
        Image2.Canvas.Brush.Color:=RGB(bR,bG,bB);
        Image2.Canvas.Rectangle(x1,y1,x2,y2);
        if x1+50<image2.Width then x1:=x1+8 else
          Begin x1:=1; y1:=y1+8; y2:=y2+8; end;
        x2:=x1+8;
        end;
    end;
end;
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:45.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025