Bild aufhellen
Übersicht

ulliBetreff: Bild aufhellen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
das hier kannst du vielleicht probieren, weiss aber nicht wie viel schneller (wenn auch) das wirkt:
![]() ![]() |
||
Norweger...
Spreche aber verdammt gut 8086 |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
ulli hat Folgendes geschrieben: Dim BildschirmR(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)
Dim BildschirmG(1024,768) Dim BildschirmB(1024,768) 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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" ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
![]() |
Freeman |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ] |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group