парадокс с Image

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Dim...ON
Сообщения: 75
Зарегистрирован: 28 янв 2008, 01:10
Контактная информация:

объясните дураку в чём раздница:
между

for i:=0 to Image1.Width do
for j:=0 to Image1.Height do
if Image1.Canvas.Pixels[i,j] = MyColor then Inc(count);

и

for i:=0 to Image1.Height do
for j:=0 to Image1.Width do
if Image1.Canvas.Pixels[i,j] = MyColor then Inc(count);

?

с виду одно и то же... но почему во втором случае он не обсчитывает правую половину холста?!?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Не в чем, просто массив в первом случае слева направо сверху вниз, а во втором сверху вниз слева вправо, проходится..
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Если бы холст был с пропорцией 1:1 то обсчитал бы, а так нет.
Нужно, чтобы во внешнем цикле просчитывалась координата Y, а во внутненнем X.
Иначе обработается только часть холста длиной Image1.Height, а в высоту, наоборот, программа будет считывать данные изниоткуда(если ширина больше высоты).
Ни что так не ограничивает фантазию программиста, как компилятор...
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Бред .
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Duncon, отнюдь. В обоих случаях обращение [i, j]. Но в первом случае i - это X, а во втором - Y
Изображение
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

А да не обратил внимание на Pixels[i,j] такую ошибку грех допускать - скорее распните нечистого.
Dr_Grizzly
Сообщения: 407
Зарегистрирован: 13 сен 2004, 12:05
Откуда: Курган
Контактная информация:

Парни Вы чаво? Тут же просто, MOTOCoder - сказал правильно, ведь в первом варианте у него идет

for i:=0 to Image1.Width do
for j:=0 to Image1.Height do
if Image1.Canvas.Pixels[i,j]

а во втором варианте он меняет цыклы местами, а Pixels[i,j] остается тем же самым!!! Для второго варианта Pixels[j,i] - будет верным. Просто парень Х наложил на Y :)

for i:=0 to Image1.Height do
for j:=0 to Image1.Width do
if Image1.Canvas.Pixels[i,j]
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто! ;) Да! Кстати! Ctrl+V реально вставляет!!! ХDD
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

Dr_Grizzly, не тормози, уже разобрались ;)
Изображение
Ответить