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

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

Вернуться   Форум программистов > Delphi программирование > Мультимедиа в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2012, 13:04   #1
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию Квадродерево

Доброе время суток.

Нужно построить квадродерево из ч\б изображения.

Помогите найти ошибку в коде.

Код:
procedure FindTree(Image: TBitmap; Nd:Node);
var
  HasBlack, HasWhite: boolean;
  i,j,x,y: integer;
  NewW, NewH: integer;
  NewRect:Trect;
begin
    Hasblack:=false;
    Haswhite:=false;

    for x:=Nd.Rect.Left to Nd.Rect.Right do
      for y:=Nd.Rect.Top to Nd.Rect.Bottom do
      begin
          if Image.Canvas.Pixels[x,y]=clWhite then
            HasWhite:=true
          else
            HasBlack:=true;
      end;

    if hasBlack=hasWhite then

    begin
      lvl:=lvl+1;
    for i:=0 to 1 do for j:=0 to 1 do

      begin
          k:=k+1;
          NewW:=(Nd.Rect.Right-Nd.Rect.Left) div 2;
          NewH:=(Nd.Rect.Bottom-A[k].Rect.Top) div 2;
          A[k].Rect:=Bounds(Nd.Rect.Left+i*NewW, Nd.Rect.Top+i*NewH, NewW, NewH);
          Nd:=A[k];
          FindTree(Image, Nd);
      end;

    end

    else
    begin

        if hasblack=true then
          A[k].Color:=clWhite
        else
          A[k].Color:=clblack;

    end;

    Form3.Show;

end;

    if hasBlack=hasWhite then

    begin
      lvl:=lvl+1;
    for i:=0 to 1 do for j:=0 to 1 do

      begin
          k:=k+1;
          NewW:=(Nd.Rect.Right-Nd.Rect.Left) div 2;
          NewH:=(Nd.Rect.Bottom-A[k].Rect.Top) div 2;
          A[k].Rect:=Bounds(Nd.Rect.Left+i*NewW, Nd.Rect.Top+i*NewH, NewW, NewH);
          Nd:=A[k];
          FindTree(Image, Nd);
      end;

    end

    else
    begin

        if hasblack=true then
          A[k].Color:=clWhite
        else
          A[k].Color:=clblack;

    end;

    Form3.Show;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
k:=0;
lvl:=1;
x1:=0;
x2:=256;
y1:=0;
y2:=256;
A[k].Rect:=Rect(x1,y1,x2,y2);
FindTree(Image1.Picture.Bitmap,A[k]);
end;


Суть вот в чем. Не ищет узлы((


end.
MeTeOpA вне форума Ответить с цитированием
Старый 15.02.2012, 20:13   #2
Rin
Негодник
Форумчанин
 
Аватар для Rin
 
Регистрация: 10.11.2009
Сообщений: 880
По умолчанию

А можно поподробнее, что такое квадродерево по-русски, а не по научному? Хоть чуть-чуть прокомментируй свой код.
И если можно, то скинь картинку, которая должна обрабатываться.
Если помог, проси поставить минус. Будь оригинален!
Rin вне форума Ответить с цитированием
Старый 17.02.2012, 14:54   #3
MeTeOpA
Форумчанин
 
Аватар для MeTeOpA
 
Регистрация: 17.02.2010
Сообщений: 194
По умолчанию

Уже вопрос закрыт) Задача решена.
Сложность пошла в другом
http://programmersforum.ru/showthread.php?t=187980
MeTeOpA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
квадродерево из изображения MeTeOpA C# (си шарп) 0 26.09.2011 01:25
Квадродерево из изображения MeTeOpA C# (си шарп) 0 09.06.2011 18:31