Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »
Страницы: 1 2 3 4 5 6

KOL 3.23 [Delphi, Windows]


dlf   (06.10.17 22:42[100]

если не ошибаюсь, в ТВижн чё то такое было, и с плавающими итп... без всяких vsprintf_s. по крайней мере видел в исходниках Дос Навигатора


Dimaxx ©   (16.02.18 14:04[101]

Бился сейчас с bitmap. До чего же он кривой!

1) Assign иногда работает, иногда падает на ровном месте. В частности пытался сделать копию одного битмапа в другом, так после assign второй битмап упал на Free.
2) Проблема была в глюке, когда присваиваешь ширину (или высоту, не помню уже сейчас), потом ее увеличиваешь, а потом уменьшаешь и scanline пользоваться невозможно = nil.
3) NewDIBBitmap(ширина,высота,pf4bit) - делаем битмап подобным другому. Но scanline выдает nil. А достаточно сделать Canvas.FillRect(BoundsRect), чтоб залить всю канву черным (и, тем самым, "включить" наконец scanline) и все нормализуется. Спрашивается, какого хрена? По идее мы создали битмап, данные указаны, память под битовые данные выделена, а данных на самом деле нет.

Имхо надо выбрасывать этот глюкавый битмап и делать на основе стандартного новый.


Netspirit   (16.02.18 15:03[102]

Ну, так поправить Bitmap чтобы выделял память после создания и все свойства корректно заполнял (если текущее поведение не было сделано с целью отодвинуть алокацию ресурсов до первого использования - тогда надо искать/добавить возможность делать это по требованию).


Dimaxx ©   (16.02.18 17:16[103]

Так если бы это было только в этом. А с падениями на Free после Assign или (о, боже!) SaveToFile после работы со scanline, которые вылетают в ntdll, как быть? Ошибка в коде исключена - тоже самое в VCL работает без запинки. Вышеописанное на одном изображении проходит нормально, на следующем - падает. Причем меняешь изображения местами - сначала падающее, потом нет - все равно на втором падает.


Dimaxx ©   (16.02.18 17:26[104]

Кстати, в NewDIBBitmap память для DIBBits выделяется сразу, но непонятно, почему scanline выдает nil. И на кой черт в GetScanline:

Result := Pointer( PAnsiChar( fDIBBits ) + fScanLineSize * Y );

указатель fDIBBits оборачивается PAnsiChar?? Откуда такая дичь? Мб тут проблема? Неужели сложно сделать:

Result := Pointer( DWORD( fDIBBits ) + fScanLineSize * Y );


Netspirit   (16.02.18 18:26[105]


> Откуда такая дичь?

Ну, так арифметика с Pointer-ами (до недавнего времени) работает только с PAnsiChar(). Так и привыкли.

> Мб тут проблема?

Да, вроде, вполне безобидный код. Возвратит лажу, если fDIBBits указывает на что-то левое или fScanLineSize вычислен неправильно.


Dimaxx ©   (19.02.18 11:54[106]

Проблему с падением при уменьшении глубины цвета решил - тупо загнал одинаковые палитры в битмапы и отрисовал большую глубину на меньшую. Все "сконвертилось", палитра не искажена, запись и удаление без вылетов. Костыль, конечно, но другого выхода пока нет.


Styx ©   (19.02.18 22:59[107]


> отрисовал большую глубину на меньшую

А разве есть какой-то другой способ?


Dimaxx ©   (20.02.18 10:04[108]

>> А разве есть какой-то другой способ?
Руками. Тем более, если палитра заранее неизвестна (дизеринг). В данном случае палитра была известна и "умещалась" в 16 цветов. Но могут быть варианты, когда исходная палитра имеет цветов больше, чем результирующая.


Страницы: 1 2 3 4 5 6 версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо