![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 (т.е буфер)