"schnelles Alpha"
-
Hi, brauche hilfe
ich möchte ein Bild (TBitmap) auf ein anderes zeichnen (->Canvas->Draw?), wobei eine bestimmte Farbe clTransparent Transparent ist, und der Rest mit einer Deckfähigkeit/Durchsichtigkeit von wAlpha (0 = 100% durchsichtig, 255 = 0% durchsichtig) gezeichnet wird.
Ich hab das insofern hingekriegt, dass ich über Canvas->Pixel[X][Y] jeden Pixel ablese (2 for schleifen), die neue Farbe berechne und auf die Zieloberfläche schreibe. Das Problem ist nur, dass es bei einem Bild von z.B. 800x600 relativ langsam ist! Ich bräuchte was schnelles.
Was kann ich machen? Was kann mir helfen?Hilft miiiiir!
Danke
-
Zwei Vorschläge plus ein schlauer Spruch:
(a) statt mit Pixel[x][y] zu arbeiten, greif' lieber mit Zeigern und Scanline() /* wenn ich mich richtig erinnere */ auf die Bilddaten zu. Einen Zeiger mit ++ über 'ne Zeile laufen zu lassen, ist erheblich fixer, als der Weg über Aufrufe in die VCL für jeden Pixel.(b) fast jede Hardware unterstützt heutzutage Alphablending. Mit DirectX kann man Surfaces wunderbar per Hardware alpha-blenden. Das ist sogar relativ einfach... wenn man DX erst einmal in seiner Applikation zum Laufen gebracht hat. Der Borland Builder macht einem die Sache bei DX9 dabei auch nicht angenehmer.
Wenn das Alphablending bei deiner Anwendung eine Hauptrolle spielt, ist DirectX die beste Wahl. Wenn das Blending nur ein netter Gimmick am Rande ist, eher nicht.Schlauer Spruch: bei Windows 2K und XP ist Alphablending an verschiedenen Stellen in der API berücksichtigt. Mach dich da einfach mal schlau. Die Chancen stehen gut, dass WinAPI-Funktionen ebenfalls die Hardware für's Alphablending nutzen.