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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2010, 11:37   #1
nolz
Пользователь
 
Регистрация: 30.08.2009
Сообщений: 35
По умолчанию поиск цвета пикселей

девять рисуноков разделёны на 12 равных частей каждый, если в части присутствует хотябы один пиксель чисто чёрного цвета($000000), то определённому элементу массива присваивается 1, иначе 0.
Ниже приведённый код не верен, подскажите как составить алгоритм, так что бы при переходе на новую часть рисунка, ставились координаты начала этой части.
Код:
    for i:=1 to 9 do
     begin
       j:=1;
       x:=0;
       y:=0;
       s:='img/'+inttostr(i)+'.bmp';
       image1.Picture.LoadFromFile(s);
       for ky:=1 to 4 do
         for kx:=1 to 3 do
           begin
            repeat
              repeat
                 if image1.Canvas.Pixels[x,y]=$000000 then masx[i,j]:=1 else masx[i,j]:=0;
                 x:=x+1;
              until (x>=50*kx);
              y:=y+1;
            until (y>=50*ky);  
              j:=j+1;

           end;
     end;
    for i:=1 to 9 do
      for j:=1 to 12 do
       listbox1.Items.Add(inttostr(masx[i,j]));
ещё одна проблема возникает в том, что программа ведёт не правильный счёт пикселей, я пересмотрел свой код, и вроде всё правильно, но то что выводится в listbox говорит об обратном
Подскажите пожалуйста в чём проблемма.

подправил немного свой код

Код:
   for i:=1 to 9 do
     begin
       j:=1;
       x:=1;
       y:=1;
       s:='img/'+inttostr(i)+'.bmp';
       image1.Picture.LoadFromFile(s);
     repeat
       px:=50;
       py:=50;
       for ky:=1 to 4 do
         for kx:=1 to 3 do
          begin
            repeat
              repeat
                 if image1.Canvas.Pixels[x,y]=$000000 then masx[i,j]:=1 else masx[i,j]:=0;
                 x:=x+1;
              until (x>=50*kx);
              y:=y+1;
            until (y>=50*ky);
            j:=j+1;
            x:=px;
            y:=py;
          end;
       py:=py+50;
       if px<150 then px:=px+50;   
     until (py>=200) and (px>=150);
     end;
    for i:=1 to 9 do
      for j:=1 to 12 do
       listbox1.Items.Add(inttostr(masx[i,j]));
теперь происходит зацикливание, не понимаю почему.

Последний раз редактировалось nolz; 27.05.2010 в 12:26.
nolz вне форума Ответить с цитированием
Старый 27.05.2010, 13:30   #2
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

Вообще-то в ListBox здесь выводится массив 0 и 1, что говорит о наличии или отсутствии черного цвета в определенных областях рисунка.
Ol'ga_new вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графика. Координаты пикселей. KALISNIK Помощь студентам 0 28.03.2010 20:11
Замена некоторых пикселей в изображении acid_bmstu Общие вопросы Delphi 8 07.12.2009 10:24
Изменение пикселей Antitime Мультимедиа в Delphi 2 27.08.2009 17:37
Таблица пикселей bl0w Мультимедиа в Delphi 1 19.01.2009 00:32
Извлечение RGB пикселей из bmp-файла St0ne-c0ld Фриланс 7 16.10.2008 18:27