Einzelnen Beitrag anzeigen

Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: schnellerer Zugriff auf Tbitmap

  Alt 7. Dez 2004, 19:03
Zitat von cumi:
Jo wenn du mal so richtig reinzoomen willst kommst du mit den Double wirklich an den Anschlag... Und viel langsamer wirds ja mit Extended wahrscheinlich auch nicht sein, oder?
Immerhin ca. Faktor 3 (bei einfacher Addition). Hab hier mal einen Test mit so ziemlich allen Typen gemacht.

Zitat von cumi:
Äh also bis jetzt hab ich ihn einfach immer gar nicht berücksichtigt. Daher wird er höchstwahrscheinlich auf 0 stehen... Funktioniert aber trotzdem. Kann aber auch sein das die Funktion Color32 den Alphawert automatisch auf 255 setz.
Wenn du bei Color32() nur 3 Parameter übergibst, dann ist Alpha per default auf 255 (= voll Deckend)

Zitat von cumi:
Nun du sagtest dieser werde für die Transparenz benutz. Wie funktioniert das? Mir ist gleich die Idee gekommen, dass ich eigentlcih übergänge von einer in die andere Farbe so rechnen könnte. Äh also mal eine Idee wie ich mir vorstellen könnte wies gehen könnte Kann man einfach zuerst was zeichen, sprich einen Pixel einfärben mit dem Alphawert 255 und danach den selben Pixel nochmals überschreiben allerdings mit einem Alphawert von zb. 128 und dann er der Pixel schlussentlich den Mittelwert? Naja war nur so eine Idee
Das geht, allerdings nicht via TBitmap32.Pixels[], da du damit den Pixel incl. Alphawert ganz neu setzt. Du müsstest dir ein zweites TBitmap32 machen, und dort dein zu überblendendes Bitmap mit Transparenzen rein schreiben. (TBitmap32.BlendMode muss dann auf dmBlend gesetzt werden.) Dann kannst du das mit DrawTo() auf das erste drauf malen, mit Berücksichtigung der Alphawerte.

Zitat von cumi:
Ah supi, wusste nicht das dies so einfach geht Naja wie soll man schno auf die Ideekommen eine *.bmp Datei mit VirtualDub zu laden....
Ich habs einfach ausprobiert, da es in der Filterliste des Open-Dialogs steht

Zitat von cumi:
Nun hab ich aber trotzdem nochmals eine Frage. Also irgendwas mach ich da noch nicht ganz richtig habe ich bemerkt. Es sind nicht einfach TBitMap32 die mehr Stack brauchen, nein ich brauche wenn ich das selbe nochmals rechne und eigentlich nicht weitere TBitMaps erzeuge (mach ich dann auch teilweise in einer doppeltverlinkten Liste. Seit ich dieses System kenne brauch ich es wo es nur irgendwie einbisschen Sinn macht weil mich die Geschwindigkeit und die Bedienung fast vom Stuhl gehauen hat ).
Ich überschreibe dabei allerdings ein vorhandenes TBitMap immer wieder. Nun der fehler muss wohl dabei liegen.
Ich mache dies so:
Delphi-Quellcode:
  img:=TBitmap32.Create; //img ist vom Typ TBitMap32
  img.Width:=sRef.dx;
  img.Height:=sRef.dy;
Ich hab dann mal zum probieren immernoch vor dem TBitmap32.Create img.free aufgerufen, was allerdings keine Abhilfe schuf.
Iregdnwer eine Idee was da sonst noch schieflaufen könnte??
Das ständige Freigeben und Neuerstellen ist imho sehr unsauber, zumal der Speichermanager von Delphi dazu neigt einmal alloziierten Speicher nicht umgehend an Windows zurück zu geben (zur Geschwindigkeitsoptimierung). Nimm besser eine einzige Variable vom Typ TBitmap32 und mache vor dem Neuzeichnen ein Clear(Color32(0,0,0));
btw: Du schreibst "Stack". Objekte werden doch aber auf dem Heap angelegt, oder?

Zitat von cumi:
Ah ja und gibts kei Tool von Delphi her welches einem anzeigt wo wieviel Speicher gebraucht wird? Ich benutze bis jetzt (ich weiss, dass es nichts dümmeres gibt ) den Taskmanager von WinXP. Ich zweifle jedoch an dessen Richtigkeit.....
Ich habe hier schon öfters Hier im Forum suchenmemproof gelesen. Benutzt hab ich es allerdings noch nicht.

Arrividetschi
Fabian
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat