BPS #16: Schwarzweiß ist das neue Bunt - Auswertung
Übersicht BlitzBasic Beginners-Corner
XeresModeratorBetreff: BPS #16: Schwarzweiß ist das neue Bunt - Auswertung |
So, Jan 22, 2012 15:33 Antworten mit Zitat |
|
---|---|---|
So! Wer konnte die Transformation umsetzen?
Das war die Aufgabe Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern. Diskussion Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen. Nächste Aufgabe In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt. Viel Spaß & viel Erfolg! Musterlösung: BlitzBasic: [AUSKLAPPEN]
Wie DerHase so richtig im Chat bemerkte (und einige wussten oder nach schlugen) ist der Grauton hier nur ein Mittelwert. Um ein Bild in Grausstufen mit der richtigen Luminanz (d.h. die Helligkeit der Farben bleibt erhalten) zu konvertieren, muss man die Farben in einem Verhältnis von 30% Rot, 59% Grün, und 11% Blau mischen. Wieder was gelernt! |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am Mo, Feb 06, 2012 0:52, insgesamt 2-mal bearbeitet
darth |
So, Jan 22, 2012 16:20 Antworten mit Zitat |
|
---|---|---|
Hallo,
hier ist erstmal meien Funktion: Input: Image Output: Image BlitzBasic: [AUSKLAPPEN] Function greyFilter( src ) Vom Prinzip her ist es ganz einfach: Man liest jeden Pixel ein, berechnet die RGB-Werte (die "Funktion" dazu findet sich im ReadPixel - Hilfefile) und nimmt dann den Durchschnitt der drei Werte ((R+G+B)/3). Der errechnete Pixel wird dann wieder reingeschrieben (errechnen des Farb-Integers sollte sich im Writepixel - Hilfefile finden). Anmerkung: Für ReadPixelFast und WritePixelFast braucht man LockBuffer und der Bereich geht von 0 - (width -1) (wie generell bei C-artigen Arrays). MfG, Darth |
||
Diese Signatur ist leer. |
- Zuletzt bearbeitet von darth am So, Jan 22, 2012 17:47, insgesamt einmal bearbeitet
ozzi789 |
So, Jan 22, 2012 16:47 Antworten mit Zitat |
|
---|---|---|
Wiedermal viel zu viel gemacht, sorry
Code: [AUSKLAPPEN] ; Beginner's Practice Series #16 - Schwarzweiss ist das neue Bunt |
;-----------------------------------------------------------------| ; ozz789 - 05.01.2012 | ;-----------------------------------------------------------------| ; Do whatever you want licence | ;-----------------------------------------------------------------| ;Commandline von Hochkommas säubern filepath$=Replace(CommandLine(),Chr(34),"") ;Falls keine Commandline da, also "bloss" doppelgeklickt wurde If filepath$="" ;Dies dem User mitteilen Color 255,0,0 Print "Es wurde kein Bild per Drag&Drop" Print "auf die Exe gezogen!" Color 255,255,255 Print "" Print "Versuche Standardbild "+Chr(34)+"tosw.png"+Chr(34)+" zu laden" Print "" Print "Auf Tastendruck gehts weiter!" filepath$="tosw.png" ;Versuchen das Standardbild zu laden image=LoadImage(filepath$) ;Falls es nicht gefunden/geladen worden konnte mit Fehlermeldung abbrechen If image=0 RuntimeError "tosw.png konnte nicht gefunden/geladen werden...!" WaitKey Else ;Falls die Commandline einen Pfad enthält, diesen versuchen zu laden image=LoadImage(filepath$) If image=0 RuntimeError "Bild konnte nicht gefunden/geladen werden...!" EndIf ;Die Breite&Höhe des Bildes auslesen und speichern img_width=ImageWidth(image) img_height=ImageHeight(image) ;Falls das Bild doch etwas grösser ist den Windowscaled Modus setzen If img_width>1280 Then graphics_flag=3 Else graphics_flag=2 EndIf ;Das Graphicsfenster doppelt so breit machen wie das Bild plus 20 pixel in der Höhe (siehe unten) Graphics img_width*2,img_height+20,32,graphics_flag SetBuffer BackBuffer() ;Durch das erneute Graphics setzen müssen wir unser Bild erneut laden :( image=LoadImage(filepath$) ;Geladenes Bild anzeigen DrawImage image,0,0 Text img_width,img_height/2,"Bin am Arbeiten ;)" AppTitle "Bin am Arbeiten ;)" Flip ;Buffer locken für Read/Writepixelfast LockBuffer BackBuffer() ;Startzeit speichern, wird später benutzt start#=MilliSecs() ;Eine Schleife erstellen die sooft durchläuft wie die Breite des Bildes (von Null beginnend) For x=0 To img_width-1 ;Eine Schleife erstellen die sooft durchläuft wie die Höhe des Bildes (von Null beginnend) For y=0 To img_height-1 ;Den Pixel an der X/Y Koordinate auslesen (siehe Schleifenwerte von X/Y) rgb=ReadPixelFast(x,y,BackBuffer()) ;Den zurückgelieferten HEX Code in R/G/B Werte aufteilen r = (rgb And $FF0000) / $10000 g = (rgb And $FF00) / $100 b = rgb And $FF ;Den totalen Wert aus dem R/G/B Werten zusammenaddieren und durch 3 teilen (Transformation zu S/W) tot=r+g+b tot=tot/3 ;Den totalen Wert wieder zueinem HEX Wert zusammensetzen sw_rgb= tot*$10000 + tot*$100 + tot ;Den neuen Pixel um die Bildbreite versetzt (also rechts davon) zeichnen WritePixelFast x+img_width,y,sw_rgb Next Next ;Endzeit speichern finish#=MilliSecs() ;Buffer wieder unlocken UnlockBuffer BackBuffer() ;Totale Zeit berechnen (als Float da Kommastellen benötigt werden) total#=Float((finish#-start#)/1000) ;String präparieren it_took$="Es dauerte "+total#+" Sekunden um das Bild in S/W umzuwandeln!" ;Diesen String nun als Apptitle setzen und ausgeben AppTitle it_took$ Text 1,ImageHeight(image),it_took$ Flip ;Eingaben während diesem ganzen Vorgang vergessen FlushKeys() ;Auf Keyhit warten WaitKey ;Und tschüss End |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
joshmami |
So, Jan 22, 2012 17:16 Antworten mit Zitat |
|
---|---|---|
Ich habe nicht wie alle anderen (bis jetzt) einfach den RGB-Durchschnitt genommen,was auch eine gute Lösung ist, sondern die sogenannte Leuchtkraft-Graustufenumwandlungsformel genommen. Diese wird unter anderem auch bei GIMP eingesetzt, glaube ich.
BlitzBasic: [AUSKLAPPEN] Graphics 1024,768,0,2 ;Fenster erstellen |
||
Mfg Joshmami |
Tennisball |
So, Jan 22, 2012 17:19 Antworten mit Zitat |
|
---|---|---|
Hi,
meine Formel ist die gleiche wie Darths und ich hab als kleines Gimmick noch einen Übergang reingebastelt. BlitzBasic: [AUSKLAPPEN] Graphics3D 800, 600, 0, 2 mfg, Tennisball |
||
Blitzcraft |
So, Jan 22, 2012 22:58 Antworten mit Zitat |
|
---|---|---|
MASTEREDIT( ):
Danke für die kleine Bemerkung Holzchopf Mein Beitrag(BMax) |
||
- Zuletzt bearbeitet von Blitzcraft am So, Jan 22, 2012 23:21, insgesamt 2-mal bearbeitet
HolzchopfMeisterpacker |
So, Jan 22, 2012 23:11 Antworten mit Zitat |
|
---|---|---|
@Blitzcraft: Die anderen posten BMax-Codes wohl im BMax-Pendant | ||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Bamboo |
Do, Jan 26, 2012 18:11 Antworten mit Zitat |
|
---|---|---|
BlitzBasic: [AUSKLAPPEN] image = LoadImage("sample.png") Dasselbe System wie bei allen anderen auch... |
||
count-doku |
Do, Jan 26, 2012 18:16 Antworten mit Zitat |
|
---|---|---|
Hallo,
etwas länger und mehr "objekt orientiert" aber vom Kern her das Gleiche. BlitzBasic: [AUSKLAPPEN] Graphics 600,300,0,2 lg, count-doku |
||
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group