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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2007, 01:41   #1
komarevsky
 
Аватар для komarevsky
 
Регистрация: 13.07.2007
Сообщений: 4
По умолчанию Есть кусок кода

Есть вот такой вот кусок кода:

Код:
 
...
var p1,p2: PByteArray;
...
p1:=bmp.ScanLine[i];
p2:=bmp.ScanLine[i+1];
...
if (p2[j]=clWhite) and (p2[j-1]=clBlack) and (p1[j]=clBlack) then ...
Так вот всё дело в том, что это условие всегда возвращает результат false, а почему не могу никак разобраться. Может кто знает? Подскажите пожалуйста
komarevsky вне форума Ответить с цитированием
Старый 13.07.2007, 02:28   #2
Iceman
Форумчанин
 
Регистрация: 08.07.2007
Сообщений: 154
По умолчанию

ето задача? p1[j] = p2[j-1]
Iceman вне форума Ответить с цитированием
Старый 13.07.2007, 10:05   #3
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

значит картинка такая.. что комбинация не встречается
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 13.07.2007, 11:00   #4
komarevsky
 
Аватар для komarevsky
 
Регистрация: 13.07.2007
Сообщений: 4
По умолчанию

В картинке, нужно найти такой вот пиксель белого цвета, такой чтоб сверху над ним, и слева от него было по пикселю черного цвета.
В тестируемой картинке такой пиксель есть.
Возможно, просто надо условие не так писать. Допустим не clWhite, а что-нть другое.
komarevsky вне форума Ответить с цитированием
Старый 13.07.2007, 13:11   #5
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Может не тут ошибка, а в цикле где-то? Или сканлайны снизу вверх считаются (есть же параметр "flip row order" в фотожопе например)
пыщь
JTG вне форума Ответить с цитированием
Старый 13.07.2007, 22:03   #6
komarevsky
 
Аватар для komarevsky
 
Регистрация: 13.07.2007
Сообщений: 4
По умолчанию

Дело в том, что уже при самой компиляции не выдаётся активная ошибка, а как сообщение внизу пишется что условие будет всегда возвращать false.
А что касается снизу-вверх, то там есть и такой пиксель, который соответствует этому условию, так что дело всё-таки в самом условии
komarevsky вне форума Ответить с цитированием
Старый 14.07.2007, 23:46   #7
Sergey_nl
Пользователь
 
Регистрация: 02.07.2007
Сообщений: 23
По умолчанию

Полагаю, дело в том, что clWhite - 32-разрядная константы, причём старшие байты ненулевые: clWhite=$FFFFFF
Сравнивая любое число размером в байт с $FFFFFF Delphi, видимо, приводит байт к 32 разрядам, дополняя нулями недостающее.
Отсюда делается вывод, что самое первое выражение
Код:
 if (p2[1]=$FFFFFF )
всегда будет давать false
Советую или сравнивать байт с 255, или использовать тройки байтов, если изображение 24-разрядное.
Проекты для лучших программистов http://www.netlancer.ru

Последний раз редактировалось Sergey_nl; 14.07.2007 в 23:49.
Sergey_nl вне форума Ответить с цитированием
Старый 19.07.2007, 17:43   #8
komarevsky
 
Аватар для komarevsky
 
Регистрация: 13.07.2007
Сообщений: 4
По умолчанию Спасибо

Спасибо! Действительно помогло.
Вместо clBlack нужно 0
Вместо clWhite нужно 255
komarevsky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переведите кусок кода на понятный язык НЕпрограммисту grenkoff Помощь студентам 4 11.07.2008 17:33
Вставить 'кусок' другой страницы N!ckeL HTML и CSS 5 25.06.2008 01:43
кусок кода считать не из тестового файла а из Tmemo Stanislav Общие вопросы Delphi 8 07.01.2008 22:12
помогите понять кусок кода Arteom БД в Delphi 7 31.08.2007 08:51
Выдернуть куски кода из html-кода trafbite Помощь студентам 7 18.08.2007 13:51