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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2009, 20:07   #11
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Гы. Надо было мне прояснить свой код раньше. Вы тут не заметили одну деталь:
Код:
   While N[i]<> Image1.Canvas.Pixels[X,Y] do
    If N[i] = 0 Then N[i] := Image1.Canvas.Pixels[X,Y] Else
     Inc(I);
   End;
Вот например у нас (для простоты имадж 17*1) пусть первые 16 цветов - разные, а последний равен второму:
1) Гоняются циклы и заполняется массив.
2) Дошли до последнего элемента:
Код:
While N[i]<> Image1.Canvas.Pixels[X,Y]
Нет, не равен, значит заходим в цикл
Код:
If N[i] = 0 Then N[i] := Image1.Canvas.Pixels[X,Y]
нет, N[0]<>0? значит прем по Else
Код:
Inc(I);
Теперь I = 1
Код:
While N[i]<> Image1.Canvas.Pixels[X,Y]
А теперь вылазием из цикла, Ведь N[1] = цвету последнего пикселя.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.11.2009, 20:11   #12
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

НАШЕЛ!!! Оказывается у Image1 не был выставлен AutoSize. Спасибо за внимание!
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 18.11.2009, 20:12   #13
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А можно еще вопрос, дошли до последнего, ну это при i = 15, а вот после этого
Цитата:
нет, N[0]<>0? значит прем по Else
Код:


Inc(I);

Теперь I = 1
С какого перепуга, i было 15, потом увеличили на 1, и оно стало 1 вот это действительно фантастика

Edit:
Вообщем ясно, тут не помочь я про цикл while, ведь условие if n[i] = 0 и приравнивание, и увеличение i все происходит в этом же цикле while, и когда нибудь, 99% i станет больше 15, и тогда в цикле while n[16] <> image1... ну а вот каким чудесным образом после того как был вызван Inc(I); причем I был 15, сразу после вызова, I станет = 1, это я не могу понять. Вообще даже удивляет, как цикл, не зацикливается, видимо пишет в память, все пиксели, после массива... надеюсь не зацепит ничего важного

Последний раз редактировалось BOBAH13; 18.11.2009 в 20:20.
BOBAH13 вне форума Ответить с цитированием
Старый 18.11.2009, 20:14   #14
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Код:
 For Y:=0 to Image1.Height - 1 do
  For X:=0 to Image1.Width -1 Do
   Begin
   I:=0;
   While N[i]<> Image1.Canvas.Pixels[X,Y] do
    If N[i] = 0 Then N[i] := Image1.Canvas.Pixels[X,Y] Else
     Inc(I);
   End;
Перед каждым циклом обнуляется счетчик.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смена цвета. Stranger333 Общие вопросы Delphi 6 07.10.2009 21:14
Получаю сообщение "This file is used by the project manager only and should be treated like the project f fs444 C++ Builder 1 22.09.2009 11:05
Получаю хендл окна виндовского калькулятора Lich Win Api 8 01.07.2008 10:43
Формат цвета xTANATOSx Общие вопросы Delphi 14 02.11.2007 20:22
цвета Toxa Общие вопросы Delphi 3 20.04.2007 12:03