Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TBitmap и Array of Byte


V ©   (2009-11-05 20:27:00) 

Добрый вечер всем :)
Есть Array of Byte, в котором битмап картинка. Данные в массиве правильные.

hfile:=CreateFile(PChar('c:\111.bmp'),GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
if hFile<>INVALID_HANDLE_VALUE then
begin
  WriteFile(hFile,buf[0],Length(buf),NumWritten,nil);
  CloseHandle(hfile);
end;


Выдает в c:\111.bmp валидную картинку, битмап.

Вопрос: как бы так чудесно сделать, чтобы в
bmp:TBitmap оказались эти байтики, чтобы с этим bmp можно было работать дальше?

bmp:=TBitmap(buf) приводит к катастрофе масштаба гибели приложения.


RWolf   (2009-11-06 14:45:00) [1]

Штатный механизм загрузки компонентов в Delphi: AStream.LoadComponent(MyComponent);
Загружаемые классы должны быть зарегистрированы: RegisterClass(TJpegImage);


VS   (2009-11-06 13:29:00) [2]

Нет.. в буфере находится последовательность байтиков, в этой последовательности затесались джипеги, текст, пнг, битмапы, гифы.. и известно лишь только то, откуда начинается и где заканчивается "файл" в буфере)

Зачем же весь этот хлам попадает в буфер да так, чтобы все подряд шло?
Ну.. мне так захотелось)) Я подумал, что скоростнее в процессе работы программы выдрать нужный "контент" из памяти, нежели обращаться к диску (особенно если это флешка и часто программа требует в разных местах этот "контент"). Сейчас просто загрузил все что нужно при старте программы, и потом приятно работаешь :)


Anatoly Podgoretsky   (2009-11-06 09:53:00) [3]

А bmp.LoadFromFile рассматривать не стоит? Хотя это самый прямой путь;


@!!ex   (2009-11-05 21:42:00) [4]

> [4] V   (05.11.09 21:38)

Прочитать заголовок, узнать BPP, размер
и самому ручками запихать в ScanLine.
Только это геморно. Потому что нужно выравнивание учитывать и прочие неприятные мелочи


V   (2009-11-05 21:38:00) [5]

@!!ex
Спасибо :) Спасло :)
Интересуют еще методы решения данной задачи..


@!!ex   (2009-11-05 21:18:00) [6]

> [2] V   (05.11.09 21:05)

TMemoryStream спасет ОРД.


V   (2009-11-05 21:05:00) [7]

buf это Array Of Byte, динамический...
bmp.LoadFromStream(buf); не то...


Rendal   (2009-11-05 20:46:00) [8]

Если я правильно понял, попробуй так:

 bmp.LoadFromStream(buf);


З.Ы. Это если buf:Tfilestream (т.е буфер)


Наверх

Титульная страница Поиск, карта сайта Написать письмо