Страница 1 из 1
как сериализовать свойство битмап?
Добавлено:
26.09.2009 15:44:23
alexrayne
драсте
понадобилось вручную сериализоват свойство битмапа. уперся в то что TWriter\Treader методы Write\ReadPersistent запрятали в protected, у TGraphic таже беда, и получеся крутись как хочеш.
поделитесь кто как правляется.
Re: как сериализовать свойство битмап?
Добавлено:
26.09.2009 16:35:24
carrots
Может подробнее о задаче расскажешь, а то я почти ничего не понял.
В любом случае в TGraphic все методы прописаны виртуальными, так что берешь и накладываешь.
- Код: Выделить всё
TMyBitmap = class(TBitmap)
protected
procedure ReadData(Stream: TStream); override;
procedure WriteData(Stream: TStream); override;
private
{ private declarations }
public
{ public declarations }
end;
Re: как сериализовать свойство битмап?
Добавлено:
26.09.2009 23:15:43
alexrayne
делать наследника TBitmap своего и переобъявить его методы Store/ReadData публичными, так я вас понял?
ну вообче ето интересно. по сравнению с вариантом лобовым - сериализовать через MemoryStream, это наверно проще таки.
Re: как сериализовать свойство битмап?
Добавлено:
29.09.2009 16:35:58
alexrayne
оказывается борландовцы еще еинтереснее прикольнулись - они для сериализации TGraphic делают так
procedure TGraphic.DefineProperties(Filer: TFiler);
function DoWrite: Boolean;
begin
if Filer.Ancestor <> nil then
Result := not (Filer.Ancestor is TGraphic) or
not Equals(TGraphic(Filer.Ancestor))
else
Result := not Empty;
end;
begin
Filer.DefineBinaryProperty('Data', ReadData, WriteData, DoWrite);
end;
здесь уже Write/ReadData типа TStreamProc и соответственно они есть обертки для методов read/SavetoStream
Re: как сериализовать свойство битмап?
Добавлено:
29.09.2009 18:19:31
carrots
Честно говоря не понятно в чем у вас проблема, какая у вас задача. Мне уже много приходилось сохранять и восстанавливать разные компоненты и их свойства, никогда в этом особых проблем не было (Если вам нужно сохранить какие-то свойства в Stream - вам для этого не нужны никакие спрятанные функции... Если нужно сохранить изображение - используйте SaveToStream, а если свойство - Stream.write()).
Если вам нужно перевести свойство битмапа не в стрим, то ответ будет зависить от того куда вам его нужно перевести.
Для чего и какое свойство вам нужно сериализовать?
Re: как сериализовать свойство битмап?
Добавлено:
29.09.2009 22:51:03
Timid
Обычное преобразование потока в base64 можно сделать.
Зачем нужно что-то еще изобретать?
Re: как сериализовать свойство битмап?
Добавлено:
01.10.2009 21:54:17
alexrayne
надо просто сохранять битмап в ресурсы по условию, проблема была в том что собственные методы сериализации битмапа закрыты, решил ето как и говорили выше - написал наследника.
работа через стримы открытыми методами требует использования промежуточного буфера - tmemorystream например, но ето сложнее