[BB]2D-Alpha mit dem Befehl "Alphaimage"
Übersicht

![]() |
ChristophBetreff: [BB]2D-Alpha mit dem Befehl "Alphaimage" |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was bringt der Befehl?
Ich habe eine Funktion für 2D alpha. Diese funktioniert wie Drawblock, mit dem Unterschied, dass noch ein 4. Parameter angegeben wird: der Alphawert. Syntax: Alphaimage bild,x-position,y-position,alpha# Für alpha wird wie von 3D gewohnt ein Wert zwischen 0 (unsichtbar) und 1(sichtbar) angegeben. Das Prinzip: Jeder Punkt aus dem Bild und auf dem Buffer werden ausgelesen und ein Zwischenwert wird errechnet. Hier die Funktion: Code: [AUSKLAPPEN] Function Alphaimage(bi,x,y,a#)
If a#=0 Then Return If a#=1 Then DrawBlock bi,x,y:Return w=ImageWidth(bi) h=ImageHeight(bi) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i=x To x+w-1 For j=y To y+h-1 rgb=ReadPixelFast(i,j,BackBuffer()) r=(rgb And $FF0000)/$10000 g=(rgb And $FF00)/$100 b=rgb And $FF rgb2=ReadPixelFast(i-x,j-y,ImageBuffer(bi)) r2=(rgb2 And $FF0000)/$10000 g2=(rgb2 And $FF00)/$100 b2=rgb2 And $FF r=r+(r2-r)/(1/a#) g=g+(g2-g)/(1/a#) b=b+(b2-b)/(1/a#) rgb=r*$10000 + g*$100 + b WritePixelFast(i,j,rgb,BackBuffer()) Next Next UnlockBuffer ImageBuffer(bi) UnlockBuffer BackBuffer() End Function Im Code wird die Funktion ganz normal aufgerufen, hier ein Beispiel: Code: [AUSKLAPPEN] Graphics 800,600,32,2
SetBuffer BackBuffer() SeedRnd MilliSecs() ;Bild1 Bild=CreateImage(50,50) Bild2=CreateImage(50,50) SetBuffer ImageBuffer(Bild) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,50,50 SetBuffer ImageBuffer(Bild2) Color Rand(0,255),Rand(0,255),Rand(0,255):Rect 0,0,50,50 SetBuffer BackBuffer() r=1 Repeat Cls If r=1 Then a#=a#+0.01:If a#>1 Then a#=1:r=0 If r=0 Then a#=a#-0.01:If a#<0 Then a#=0:r=1 DrawImage Bild,0,0 AlphaImage Bild2,25,25,a# Flip Until KeyDown(1) Function Alphaimage(bi,x,y,a#) If a#=0 Then Return If a#=1 Then DrawBlock bi,x,y:Return w=ImageWidth(bi) h=ImageHeight(bi) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i=x To x+w-1 For j=y To y+h-1 rgb=ReadPixelFast(i,j,BackBuffer()) r=(rgb And $FF0000)/$10000 g=(rgb And $FF00)/$100 b=rgb And $FF rgb2=ReadPixelFast(i-x,j-y,ImageBuffer(bi)) r2=(rgb2 And $FF0000)/$10000 g2=(rgb2 And $FF00)/$100 b2=rgb2 And $FF r=r+(r2-r)/(1/a#) g=g+(g2-g)/(1/a#) b=b+(b2-b)/(1/a#) rgb=r*$10000 + g*$100 + b WritePixelFast(i,j,rgb,BackBuffer()) Next Next UnlockBuffer ImageBuffer(bi) UnlockBuffer BackBuffer() End Function Es ist nicht das Schnellste aber wenigstens etwas. |
||
- Zuletzt bearbeitet von Christoph am Fr, Aug 18, 2006 19:13, insgesamt einmal bearbeitet
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Gabs schon öfter, aber Hauptsache es funktioniert ![]() |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
Florian |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich die Funktion eigenlich ganz nett, aber bei mir ist leider ein Fehler aufgetaucht. Immer wenn ich das Programm im Fenstermodus starte, dann sehe ich am rechten Rand des Alphaimage nicht korrekt dargestellte Pixel. Der Fehler tritt aber nur im Fenstermodus auf. Blitz3D 1.96 Blitz3D 1.97 Blitz3D 1.98 WinXP SP2 Grafikkarte: NVIDIA GeForce4 MX 440 With AGP8X MfG Florian |
||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
ändere
Code: [AUSKLAPPEN] Function Alphaimage(bi,x,y,a#)
If a#=0 Then Return If a#=1 Then DrawBlock bi,x,y:Return w=ImageWidth(bi) h=ImageHeight(bi) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i=x To x+w ... nach Code: [AUSKLAPPEN] Function Alphaimage(bi,x,y,a#)
If a#=0 Then Return If a#=1 Then DrawBlock bi,x,y:Return w=ImageWidth(bi) h=ImageHeight(bi) LockBuffer BackBuffer() LockBuffer ImageBuffer(bi) For i=x To x+w-1 ;<------------------------------ geändert ... dann sollte es funktionieren |
||
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sry, ich habe nicht die richtige Version gepostet, bei mir auf dem PC war's richtig.
![]() (bei y wars ja richtig!) |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Funktioniert, aber ist ganz schön langsam - bei mir 1 FPS.
Meine alte Funktion ( https://www.blitzforum.de/foru...p?p=153116 ) schafft beim gleichen Bild immerhin 4 FPS. Eine verschnellerte Function (habe ich dort ergänzt) sogar 16 FPS. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
![]() |
Christoph |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die schau ich mir mal an, danke.
Wer diese 2D-Alpha-geschichten in "Echtzeit" braucht kommt ohne 3D-Grafikkarte schlecht weg ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group