как сериализовать свойство битмап?

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

как сериализовать свойство битмап?

Сообщение alexrayne » 26.09.2009 15:44:23

драсте
понадобилось вручную сериализоват свойство битмапа. уперся в то что TWriter\Treader методы Write\ReadPersistent запрятали в protected, у TGraphic таже беда, и получеся крутись как хочеш.
поделитесь кто как правляется.
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: как сериализовать свойство битмап?

Сообщение carrots » 26.09.2009 16:35:24

Может подробнее о задаче расскажешь, а то я почти ничего не понял.
В любом случае в TGraphic все методы прописаны виртуальными, так что берешь и накладываешь.

Код: Выделить всё
TMyBitmap = class(TBitmap)
  protected
    procedure ReadData(Stream: TStream); override;
    procedure WriteData(Stream: TStream); override;
  private
    { private declarations }
  public
    { public declarations }
end; 
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: как сериализовать свойство битмап?

Сообщение alexrayne » 26.09.2009 23:15:43

делать наследника TBitmap своего и переобъявить его методы Store/ReadData публичными, так я вас понял?
ну вообче ето интересно. по сравнению с вариантом лобовым - сериализовать через MemoryStream, это наверно проще таки.
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: как сериализовать свойство битмап?

Сообщение alexrayne » 29.09.2009 16:35:58

оказывается борландовцы еще еинтереснее прикольнулись - они для сериализации 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
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26

Re: как сериализовать свойство битмап?

Сообщение carrots » 29.09.2009 18:19:31

Честно говоря не понятно в чем у вас проблема, какая у вас задача. Мне уже много приходилось сохранять и восстанавливать разные компоненты и их свойства, никогда в этом особых проблем не было (Если вам нужно сохранить какие-то свойства в Stream - вам для этого не нужны никакие спрятанные функции... Если нужно сохранить изображение - используйте SaveToStream, а если свойство - Stream.write()).



Если вам нужно перевести свойство битмапа не в стрим, то ответ будет зависить от того куда вам его нужно перевести.

Для чего и какое свойство вам нужно сериализовать?
Аватара пользователя
carrots
постоялец
 
Сообщения: 138
Зарегистрирован: 28.03.2008 02:13:02

Re: как сериализовать свойство битмап?

Сообщение Timid » 29.09.2009 22:51:03

Обычное преобразование потока в base64 можно сделать.
Зачем нужно что-то еще изобретать?
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: как сериализовать свойство битмап?

Сообщение alexrayne » 01.10.2009 21:54:17

надо просто сохранять битмап в ресурсы по условию, проблема была в том что собственные методы сериализации битмапа закрыты, решил ето как и говорили выше - написал наследника.
работа через стримы открытыми методами требует использования промежуточного буфера - tmemorystream например, но ето сложнее
alexrayne
постоялец
 
Сообщения: 125
Зарегистрирован: 03.12.2008 16:56:26


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru