Страница 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 например, но ето сложнее