AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi [DelphiX] Alphablending via "Surface.Blt"
Thema durchsuchen
Ansicht
Themen-Optionen

[DelphiX] Alphablending via "Surface.Blt"

Offene Frage von "dizzy"
Ein Thema von dizzy · begonnen am 2. Jul 2004 · letzter Beitrag vom 5. Jul 2004
 
Benutzerbild von dizzy
dizzy

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

[DelphiX] Alphablending via "Surface.Blt"

  Alt 2. Jul 2004, 17:12
Hallo!

Ich versuche mich gerade in der Kunst des DirectDraw und hänge an einer blöden Stelle. Ich möchte einen Motion-Blur-Effekt realisieren.
Als Grundlage habe ich eine Array von TDirectDrawSurfaces in denen die zusammen zu blendenden Bilder liegen, aber gerade das Blending tut nicht

Erstmal etwas Kot:
Delphi-Quellcode:
const bmpCount = 3;
var i: integer;
    ba: array[0..bmpCount] of TDirectDrawSurface;
    fx : TDDBltFX;
begin
  for i := 0 to bmpCount-1 do
  begin
    ba[i] := TDirectDrawSurface.Create(DXDraw1.DDraw);
    ba[i].SetSize(1200, 600);
    ba[i].Fill(0);
  end;
  
  // Die TDDBltFX-Structure einstellen, ich hoffe hier ist alles korrekt
  fx.dwSize := SizeOf(fx);
  fx.dwDDFX := 0;
  fx.dwAlphaSrcConstBitDepth := 8;
  fx.dwAlphaDestConstBitDepth := 8;
  fx.dwAlphaSrcConst := 200;
  fx.dwAlphaDestConst := 200;

  DXDraw1.SurfaceWidth := 1200;
  DXDraw1.SurfaceHeight := 600;

  while true do
  begin

    // Die Bilder werden hier der Reihe nach um ein Element im Array
    // nach hinten verschoben. Das scheint zu klappen... in ba[1] z.B.
    // ist nachher tatsächlich ein Bild.
    for i := bmpCount-2 downto 0 do
    begin
      ba[i].Canvas.Release;
      ba[i+1].BltFast(0,
                      0,
                      ba[i].ClientRect,
                      DDBLTFAST_NOCOLORKEY,
                      ba[i]);
    end;

    ba[0].Fill(0);
    // Hier wird im Original-Code auf dem Canvas von ba[0] gezeichnet - das klappt auch.

    // Hier die Schleife die das Blending machen soll
    // und ba[0] ist anschließend ganz schwarz :(
    for i := bmpCount-2 downto 0 do
    begin
      ba[i].Canvas.Release;
      ba[i].Blt(ba[i].ClientRect,
                ba[i+1].ClientRect,
                DDBLT_AlphaDestConstOverride or DDBLT_AlphaSrcConstOverride,
                fx,
                ba[i+1])
    end;

    ba[0].Canvas.Release;
    DXDraw1.Surface.Draw(0,
                         0,
                         ba[0].ClientRect,
                         ba[0],
                         false);
    DXDraw1.Flip;
    Application.ProcessMessages;
  end;
end;
Kann mir einer sagen wo ich jetzt den Fehler sehen muss?

gruss,
dizzy

\\edit: Ach so! Ist mit DelphiX for Delphi 7
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz