Bild aufhellen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

ulli

Betreff: Bild aufhellen

BeitragSa, Nov 13, 2004 0:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hy Leute,
Ich bin grad am Basteln. Und nun habe ich mir gedacht, dass ich als kleinen "Vorspann" mein Logo mache und das dann Stück für Stück aufhelle. Hier ist erstmal der Quelltext (iss ziemlich lang, eigentlich einfach zu verstehen, hoffe ich Wink ):

Graphics 1024,768,0,2
SetBuffer BackBuffer()

Dim BildschirmR(1024,768)
Dim BildschirmG(1024,768)
Dim BildschirmB(1024,768)
Logo = LoadImage("LOGO.bmp")

DrawImage Logo,0,0

; Die Farbe jedes einzelnen Pixels erfassen
For I=0 To 1024
For J=0 To 768
GetColor I,J
R=ColorRed()
G=ColorGreen()
B=ColorBlue()
BildschirmR(I,J) = R
BildschirmG(I,J) = G
BildschirmB(I,J) = B
Next
Next


; Bildschirm löschen
Cls


; Jedem Weißen Pixel die Farbe schwarz geben
For I=0 To 1024
For J=0 To 768
If BildschirmR(I,J) = 255 And BildschirmG(I,J) = 255 And BildschirmB(I,J) = 255 Then
BildschirmR(I,J) = 1
BildschirmG(I,J) = 1
BildschirmB(I,J) = 1
EndIf
Next
Next






Repeat

Farbwechsel = Farbwechsel + 1

For I=0 To 1024
For J=0 To 768
If BildschirmR(I,J) = 1+Farbwechsel And BildschirmG(I,J) = 1+Farbwechsel And BildschirmB(I,J) = 1+Farbwechsel Then
BildschirmR(I,J) = 1+Farbwechsel
BildschirmG(I,J) = 1+Farbwechsel
BildschirmB(I,J) = 1+Farbwechsel
EndIf
Next
Next

For I=0 To 1024
For J=0 To 768
Color BildschirmR(I,J),BildschirmG(I,J),BildschirmB(I,J)
Plot I,J
Next
Next

Flip
Until KeyHit(1)

Es funktioniert zwar, aber es ist viel zu langsam. Könnt ihr mir vielleicht nen Tip geben, wie ich es schneller machen kann?

Hoffe ihr habt alles verstanden und könnt mir helfen...

ulli

regaa

BeitragSa, Nov 13, 2004 0:59
Antworten mit Zitat
Benutzer-Profile anzeigen
lockbuffer, write/readpixelfast.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

David

BeitragSa, Nov 13, 2004 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Das ist auch nicht schneller, ragaa...

@ulli:
Die Farbe Schwarz ist 0, 0, 0 nicht 1, 1, 1!
Und ich glaube nicht das du das viel schneller hinbekommst, immerhin musst du 786432 Pixel durchlaufen und neu berechnen! Leider ist BlitzBasic, in der hinsicht, recht lam...

grüße
http://bl4ckd0g.funpic.de

eXceptION

BeitragSa, Nov 13, 2004 1:55
Antworten mit Zitat
Benutzer-Profile anzeigen
das hier kannst du vielleicht probieren, weiss aber nicht wie viel schneller (wenn auch) das wirkt:

Arrow speichere das original bild in einem bank... (siehe CreateBank())
Arrow lese vom bank, schreibe zur buffer
Norweger...

Spreche aber verdammt gut 8086

BladeRunner

Moderator

BeitragSa, Nov 13, 2004 2:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Da es ja um den ganzen Screen geht, kannst du mit SetGamma und Updategamma (ab V1.80) das gewünschte Ergebnis erzielen.

Diese Frage wurde aber schon mehr als ein mal geklärt- versuch es bitte mal mit der Suche Wink

Wenn Teilbereiche aufgehellt werden sollen bleiben nur noch 3D-Lösungen (mit Sprites) oder eben Reappixelfast/Lockbuffer (nur für kleine Bildstückl geeignet).
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

eXceptION

BeitragSa, Nov 13, 2004 3:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ulli hat Folgendes geschrieben:
Dim BildschirmR(1024,768)
Dim BildschirmG(1024,768)
Dim BildschirmB(1024,768)
hier wird vier mal so viel speicher angefordert als benötigt... du hast drei integer arrays geschaffen... integer ist 32bit, und kann also die drei farben (Red%, Grn%, Blu% die 8bit sind) dadrin speichern... da benutzt du also 24bit oder 3 byte (8 * 3 = 24)
den letzten byte kannst du zum extra speicher (zum beispiel alpha werte) benutzten, oder du kannst es lassen...

tue das hier:Code: [AUSKLAPPEN]
Dim Bildschirm(1024, 768)

;lesen:
Red% = (Bildschirm(x, y) Shr $10) And $FF
Grn% = (Bildschirm(x, y) Shr $08) And $FF
Blu% = Bildschirm(x, y) And $FF

;schreiben:
Bildschirm(x, y) = ((Red% And $FF) Shl $10) Or ((Grn% And $FF) Shl $08) Or (Blu% And $FF)

;du kannst auch SO schreiben, wenn du sicher bist, das die werte kleiner sind als 256:
Bildschirm(x, y) = (Red% Shl $10) Or (Grn% Shl $08) Or Blu%
Norweger...

Spreche aber verdammt gut 8086

Hubsi

BeitragSa, Nov 13, 2004 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Dumme Idee: Man könnte das ganze einmal durchlaufen lassen, jeden Frame als Image speichern und mit AviMaker oder einem anderen passenden Programm zu einem Video zusammenklatschen. So wäre dann jeder nur erdenkliche Effekt möglich der in Realtime niemals funzen würde. Das Video stellt man dann jedem Projekt voran und schon weiß der User "Ach herrje, der ulli" Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Freeman

BeitragSa, Nov 13, 2004 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
also wennde 3D hast dann machs so :

Code: [AUSKLAPPEN]

Graphics3D 640,480,32,1
SetBuffer BackBuffer()

; 3D einstellungen für die Dunkelheit
camera=CreateCamera()
Sprite   = CreateSprite()
brush = CreateBrush (1,1,1 )
PaintEntity sprite,brush
PositionEntity sprite,0,0,1
transparency# = 1.0

While  KeyDown(1) <> 1
CameraClsMode camera,0,1
Cls
EntityAlpha sprite,transparency#
If dunkel = 0
If transparency# > 0.1 Then transparency# = transparency# - 0.0005
EndIf
DrawImage logo,(640-340)/2,(480-100)/2
If transparency# < 0.1
Delay 200
dunkel = 1
EndIf

If dunkel = 1
ms = MilliSecs()
If ms - timer > 10
sek = sek + 1
timer = ms
If sek > 2 Then  transparency# = transparency# + 0.005
If transparency# > 1.0 Then Exit
EndIf
EndIf

RenderWorld()
Flip 0
Wend


FrEeMaN
 

ulli

BeitragSa, Nov 13, 2004 13:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke @ all

Hört sich ja alles ganz gut an. Ich werd mal nen bisschen rumprobieren, um zu sehen, welche von euren Ideen die beste ist...

ulli
 

Apocalyptic

BeitragSa, Nov 13, 2004 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns um kleinere Bilder geht, nimm das hier:
http://www.blitzbase.de/quellcode/blender.zip
Den Trick kannst du natürlich auch für bildschirmfüllende Grafiken nehmen, richtig schnell ist es dann aber immer noch nicht. Ansonsten bietet es sich wie oben schon erwähnt an, den Gamma Wert zu manipulieren.
Suum cuique

[ www.ffs-net.de.vu ] [ Raycaster ]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group