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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.02.2013, 09:11
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию Как определить цвет пикселя на форме?

Доброго дня товарищи.
Имеется две формы. В первой форрме происходит вот такое :
Код:
form2.image1.canvas.brush.color := clGreen;
form2.image1.canvas.rectangle(0,0,720,9);
При этом на второй форме рисуется прямоугольник 720 на 9 , зеленый.
Однако когда я хочу на второй форме посчитать кол-во зеленых пикселей, то не получается. Например код в цикле :
Код:
if image1.canvas.pixels[3,3] = clGreen then x := x + 1 ;
То условие не сработает. Что делаю не так?
Ответить с цитированием
  #2  
Старый 01.02.2013, 09:28
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
if form2.image1.canvas.pixels[3,3] = clGreen then x := x + 1 ;
размер картинки больше или равен 720 на 9?
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 01.02.2013, 09:35
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
Код:
if form2.image1.canvas.pixels[3,3] = clGreen then x := x + 1 ;
размер картинки больше или равен 720 на 9?
Сам image ровно 720 на 9.
Я пытаюс так :
Код:
for x := 1 to 720 do if image1.canvas.pixels[x,3] = clGreen then y := y + 1;
Т.е. по русски сказать, есть временной отрезок у меня, в виде image. На нем зеленым закрашены часы, например с 2 до 3 дня.
Этим кодом пытаюсь посчитать кол-во часов.
1 пиксель = 2 минуты. но это уже другая история)
Ответить с цитированием
  #4  
Старый 01.02.2013, 11:36
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

ну осталось только посмотреть отладчиком

Код:
var
  C:TColor;
  X,Y:Integer;


Y:=0;
for X:=1 to 720 do
begin
  C:=form2.image1.canvas.pixels[X,3];
  if C = clGreen then
    Y:=Y+1;
end;

выключить оптимизацию, сделать останов на строке 10 и посмотреть, чему равен C;
Ответить с цитированием
  #5  
Старый 01.02.2013, 11:43
Аватар для alexusankov
alexusankov alexusankov вне форума
Новичок
 
Регистрация: 27.08.2012
Сообщения: 78
Версия Delphi: C++/Delphi 2010
Репутация: 10
По умолчанию

Включил отладчик - меня просто убило.
Итак, нужное мне значение называется не clGreen , а $00008200. окей, хорошо, теперь начинается самое интересное ))
Код
Код:
if colortostring(image1.Canvas.Pixels[3,3]) = '$00008200' then application.MessageBox('','');
Работать не будет)))
А в тем временем :
Код:
label1.Caption := colortostring(image1.Canvas.Pixels[3,3]);
if label1.Caption  = '$00008200' then application.MessageBox('','');
- прекрасно работает.
Шо за бред?
не хочется такой костыль втыкать в программу
**************
З.ы. Попробовал делать как раньше - стер весь код и написал заново. в таком положении работает. Видать руки кривые :
Код:
for x := 1 to 720 do if colortostring(image1.Canvas.Pixels[x,3])  = '$00008200' then label1.Caption := floattostr(strtofloat(label1.Caption) + 2);

Последний раз редактировалось alexusankov, 01.02.2013 в 11:53.
Ответить с цитированием
  #6  
Старый 01.02.2013, 11:51
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

кошмар...

1. clGreen = TColor($008000);
2. ColorToString(clGreen) = "clGreen"
3. ColorToString($00008200) = $00008200
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #7  
Старый 01.02.2013, 11:55
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Колор видимо левый и не входит в перечень определенных констант, вот тебе и выдает шестнадцатиричное значение.
По Ctrl сходи в функцию, увидишь как работает.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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