
Also, ich habe mich gestern in die Streams eingelesen, und das ist für unser Vorhaben die schlankeste Methode, da nicht so viel unbenötigtes Material mitgeschleppt wird. Das Manipulieren und so weiter klappt hervorragend...aber ich habe ein Problem. zunächst der Quelltext, dann das Problem:
Code: Alles auswählen
var
s : TMemoryStream;
i,l,HOffset,xres,yres:longInt;
b:byte;
w:word;
st,ende,manist,maniende,drwst,drwende,savst,savende,loadst,loadende:tDateTime;
begin
RamBitmap.Canvas.Brush.Color:=clred;
RamBitmap.Canvas.Pen.Color:=clred;
RamBitmap.Canvas.FillRect(0,0,Image1.Width,Image1.Height);
st:=time;
s:=tMemoryStream.Create;
savst:=time;
RamBitmap.SaveToStream(s);
savEnde:=time;
l:=s.GetSize div 2;
s.Position:=10;
s.ReadBuffer(HOffset,sizeof(longInt));
s.Position:=18;
s.ReadBuffer(xres,sizeof(longInt));
s.Position:=22;
s.ReadBuffer(yres,sizeof(longInt));
s.Position:=28;
s.Read(w,sizeof(word));
b:=255;
manist:=time;
s.Position:=Hoffset;
for i:=HOffset to l do begin
//s.Position:=i;
s.WriteByte(b);
end;
maniende:=time;
s.Position:=0;
loadst:=time;
RamBitmap.LoadFromStream(s,s.GetSize);
loadende:=time;
s.Free;
drwst:=time;
Image1.Canvas.Draw(0,0,RamBitmap);
drwEnde:=time;
ende:=time;
Showmessage('GesamtZeit: '+FloatToStr((Ende-St)*24*60*60*1000)+' ManipulationsZeit: '+FloatToStr((maniEnde-maniSt)*24*60*60*1000)+' DrawZeit: '+FloatToStr((drwEnde-drwSt)*24*60*60*1000)+' SaveZeit: '+FloatToStr((savEnde-savSt)*24*60*60*1000)+' LoadZeit: '+FloatToStr((loadEnde-loadSt)*24*60*60*1000));
end;
Danke schonmal!

Edit: wenn ich RamBitmap.LoadFromStream(s,s.GetSize); weglasse und Image1.Canvas.Draw(0,0,RamBitmap); durch Image1.picture.bitmap.loadfromStream(s,s.getsize) ersetze, habe ich auf einmal nur noch die Hälfte an DrawTime (was logisch ist, da draw entfällt und Loadzeit in drawzeit wandert), allerdings merkt man, wie es einen kurzen Augenblick dauert, bis das Bild erscheint, nach dem die showmessage bereits erschienen ist. => also immer noch das gleiche Problem, nur die Zahlen sind geschönt.