![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Использую следующий код :
Праильно ли то что в p[0] := Нижний левый угол картинки? Можно ли сделать наоборот Верхний левый угол картинки? Почему при использовании за24bit через каждые 4 значения P идет черный цвет, как это исправить? Задачи такие: Найти все не белые пикслели и превратить их в черные, а белые наоборот. После того как картинка станет черно белой вывести результат где в BMP.Heigth нет черных пикселей. C задачи я сам с правлюсь, хочу понять правильно ли написан код, и как быть с проблемами выше! По мере поступлений вопросов буду задавать. ARGB = array[0..1] of TRGB; что указывать в квадратных скобках? Буду использовать pf8bit Это сообщение отредактировал(а) Canyon - 13.4.2012, 15:34 |
|||
|
||||
Alexeis |
|
||||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Да Насколько я знаю, класс TBitmap не умеет работать с такими битмапами.
В этом формате байты цветов пикселей в строке идут в следующем порядке BGRBGR...BGR . Никаких пустых мест или промежутков нет. Промежутки есть только между строками для выравнивания.
Я бы использовал тип TRGB = packed record и тоже самое с ARGB = packed array[0..1] of TRGB; для того чтобы быть уверенным, что делфи будет правильно выравнивать записи и не оставит промежутки между ними в массиве. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
||||
|
|||||
Canyon |
|
||||||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
А вы попробуйте мой код протестировать и и увидите что на каждом 4 значении будет черный пиксель.
Картинка была 3х3 (0-Красный Зеленый Синийю 1-Синий Красный Зеленый, 3- Зеленый Синий Красный)
Вот так
Может можно было сделать как то подругому???
К чему приведе уменьшение значения в квадратных скобках ARGB = packed array[0..1] of TRGB ??????? Если заменить в коде Heigth на Width то scanline будет сканировать в другом порядке?
Это сообщение отредактировал(а) Canyon - 13.4.2012, 16:35 |
||||||||
|
|||||||||
Чучмек |
|
||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Это сообщение отредактировал(а) Чучмек - 13.4.2012, 17:25 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
Canyon |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 11.3.2012 Репутация: нет Всего: нет |
Спасибо даже и не знал о downto!
Поменя местами Heigth и Width выдает ошибку "Scan line index out range" Что эта за ошибка и почему она выскакивает? Код работает но в конце выполнения выдает ошибку выше.
В каком месте выдает я не могу выйяснить, т.к. не знаю как. Можно ли при помощи ScanLine Сканировать не слева направо а сверху вних??? Это сообщение отредактировал(а) Canyon - 13.4.2012, 17:35 |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Потому что Width>Heigth ScanLine возвращает указатель на первый байт строки. Если ты запрашиваешь сто первую строку когда их у тебя всего сто, то что ты получишь? -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Чучмек |
|
||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 2 Всего: 41 |
Да ScanLine ни чего не сканирует, она лишь возвращает указатель на строку. Вот, для размышлений:
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
Так и есть. Эта функция лишь вычисляет смещение строк. Если вызвать ScanLine для последней строки, то получим начала буфера всего растра. Дальше прибавляя смещение одной строки можно перейти к следующей строке. Поэтому цикл должен быть от 0 до Heigth - 1 и это будет координата Y, координата X будет смещением внутри строки. -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Звук, графика и видео" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |