![]() |
Модераторы: Snowy, Alexeis, MetalFan |
![]() ![]() ![]() |
|
RamIreZz |
|
|||
![]() Veni, vidi, vici. Профиль Группа: Участник Сообщений: 17 Регистрация: 9.3.2008 Где: Химки Репутация: нет Всего: нет |
Доброго времени суток.
У меня вопрос такого плана: Имеется Bitmap в виде
Нужно его преобразовать в нормальный Битмап. Вопрос как? |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
RamIreZz, для этого надо хотя бы знать высоту/ширину битмапа. Я не дока в делфи, но по аналогии с билдером можно воспользоваться свойством ScanLine, который представляет из себя указатель на строку цветов пикселей. Для работы со ScanLine надо сначала установить PixelFormat в соответсвии с размерностью цветовой палитры. Т.е. если в этом массиве каждый цвет выражается четрымя байтами, то необходимо установить PixelFormat в значение pf32bit.
|
|||
|
||||
RamIreZz |
|
|||
![]() Veni, vidi, vici. Профиль Группа: Участник Сообщений: 17 Регистрация: 9.3.2008 Где: Химки Репутация: нет Всего: нет |
UniBomb, Размер точно известен. 12*12 bmp 8bit
Это сообщение отредактировал(а) RamIreZz - 6.10.2010, 10:19 |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Тогда в твоём скопище чисел не хватает чутка. В общем как я и говорил - я не дока в делфи (а в тему забрёл случайно), посему решение показываю на С++. Уж простите меня.
Это сообщение отредактировал(а) UniBomb - 30.6.2010, 11:41 |
|||
|
||||
RomanEEP |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 424 Регистрация: 18.5.2006 Где: Коломна Репутация: 1 Всего: 8 |
а вообще преобразуется просто - перебей данные из HEX в обычный массив данных (2 сивмола преобразуются в один байт)
запиши массив в TMEmoryStream, установи позициб в начало и смело грузи TBitmap из этого массива ЗЫ: По куску C0000000C0000000 мне кажется у тебя картинка 12 на 12 |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
RomanEEP, одно только дополнение, кусок 4 байта D6000000 лишний и не является частью битмапа. Битмап, как известно, начинается с сигнатуры 42 4D что в ASCII значит BM.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
AntonN |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 491 Регистрация: 8.8.2006 Репутация: 7 Всего: 18 |
||||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
RomanEEP, Alexeis, а расскажите пожалуйста мне, дебилу, как делается "установи позицию в начало и смело грузи TBitmap из этого массива", ибо мне это тоже будет полезно
![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
UniBomb, TBitmap умеет загружать картинку из потока (наследник TStream) при помощи метода LoadFromStream(). Установка в нулевую позицию нужна не всегда. Дело в том, что некоторые классы (использующие LoadFromStream) умеют не просто загружать данные из потока, но делают это начиная с текущей позиции. Если указатель позиции в конце потока, то соответственно ничего прочитать не получиться, поэтому рекомендуется сбрасывать позицию в 0. Насколько я помню, TBitmap хотя довольно топорный класс но тут как раз можно сделать сдвиг на 4 байта от начала и читать битмап дальше ( ReadStream(Stream, Stream.Size - Stream.Position);). Однако если в конце будет мусор, то чтение такого битмапа может привести к непредсказуемым последствиям.
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Alexeis, спасибо, доходчиво
![]() |
|||
|
||||
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
А рисунок то действительно имеет размеры 12*12
![]() А мой код, который выше, такую ерунду рисует ![]() |
|||
|
||||
Alexeis |
|
|||
![]() Амеба ![]() Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 55 Всего: 459 |
На всякий случай приведу свой вариант кода
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
RamIreZz |
|
|||
![]() Veni, vidi, vici. Профиль Группа: Участник Сообщений: 17 Регистрация: 9.3.2008 Где: Химки Репутация: нет Всего: нет |
Alexeis, Спасибо большое, за помощь! А то я с графикой пока ещё не очень дружу. ;)
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |