funktion verbessern bzw. effekt verbessern(egal)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

dimaster

Betreff: funktion verbessern bzw. effekt verbessern(egal)

BeitragFr, Feb 24, 2006 14:01
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo zusammen,

ich möchte, dass bei einem bild alle schwarzen flächen z.B. blau werden und alle flächen zwischen grau und weiss grün werden...

was wär da die eleganteste lösung? wäre es möglich sowas mit bildern zu machen?(anstat grün ein bild und anstat blau ein anderes bild)

hoffe ihr versteht meine frage...

mfg dimaster
  • Zuletzt bearbeitet von dimaster am Sa, Feb 25, 2006 13:26, insgesamt 4-mal bearbeitet
 

HW

BeitragFr, Feb 24, 2006 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde Folgendes vorschlagen:
In einer For Next Schleife die Farben der einzelnen Pixel mit Readpixel bestimmen und gegebenfalls ersetzen.
Aber es gibt bestimmt elegantere Wege, das zu bewerkstelligen.
 

Ava

Gast

BeitragFr, Feb 24, 2006 14:38
Antworten mit Zitat
Du könntest zb. die jeweilige Farbe, die Du ändern möchtest, als MaskColor bestimmen und dann das Bild auf ein anderes zeichnen, das Du vorher in der neuen Farbe einfärbst. das setzt allerdings vorraus, dass die zu ersetzenden Farben einheitlich sind und keine minimalen (oder gröberen) Variationen aufweisen.

dimaster

BeitragFr, Feb 24, 2006 15:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@ava danke für den vorschlag, hilft mir aba net so viel weil es gröbere Variationen aufweist...

die erste hab ich probiert und find sie net mal so schlecht Smile

aba trotzdem danke an beide
 

Ava

Gast

BeitragFr, Feb 24, 2006 16:57
Antworten mit Zitat
Wenn Du Farbvariationen im Bild hast und einen bestimmten Bereich umfärben möchtest, dann musst Du Dir wohl eine Funktion schreiben, die Dir aus den RGB Werten Farbton / Sättigung / Helligkeit berechnet. Dann gehst Du Pixel für Pixel durch, überprüftst sie, ob sie in einem gewählten Farb- / Sättigungsbereich liegen, und wenn ja, dann verschiebst Du den Farbwert in Richtung gewünschter Ersatzfarbe, wandelst die Werte wieder in RGBs zurück und setzt den entsprechenden Pixel mit neuer Farbe über den alten.

dimaster

BeitragFr, Feb 24, 2006 17:00
Antworten mit Zitat
Benutzer-Profile anzeigen
jo so hab ichs jetzt auch gemacht funtzt super Very Happy

danke noch mal an alle

mfg dimaster

dimaster

BeitragFr, Feb 24, 2006 19:13
Antworten mit Zitat
Benutzer-Profile anzeigen
so ich hätt da nochma ne frage:

wie könnte ich zwei farben in einander verfliessen lassen, dass ein schöner übergang entsteht?
 

HW

BeitragFr, Feb 24, 2006 19:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, das geht eigentlich alles mit Readpixel und Writepixel. Eventuell solltest du dir die Befehle mal genauer anschauen. Auf Blitzbase gibt es auch eine Beschreibung, wie man aus den ermittelten Integerwerten die Rot-, Grün- und Blauwerte lesen kann. Wenn du das erstmal verstanden hast, müsstest du nur noch jeweils die durchschnittlichen Farbwerte benachbarter Pixel auf die entsprechende Bildkoordinate schreiben.

dimaster

BeitragFr, Feb 24, 2006 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hmmm ja hab mir gedacht, dass ich das so machen muss, dachte es gäbe ne schönere lösung Confused


danke

dimaster

BeitragFr, Feb 24, 2006 21:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, das ich so nerv heute, aba ich wollte euch mal fragen, ob ich das schöner bzw. wie ich einen schöneren effekt erzielen kann:
Code: [AUSKLAPPEN]

terraintex("terrain1.bmp","terraintex1.bmp")

Function terraintex(terrain$,name$)
image = CreateImage(512,512)
SetBuffer ImageBuffer(image)
bild = LoadImage(terrain$)
DrawImage bild,0,0
width = ImageWidth(bild)
height = ImageHeight(bild)
For y = 0 To height
 For x = 0 To width
  rgb=ReadPixel(x,y)
  r=(rgb And $FF0000)/$10000
  g=(rgb And $FF00)/$100
  b=rgb And $FF
  If g<19 And b<19 Then rgb=200*$10000 + Rand(206,255)*$100 + 0:WritePixelFast x,y,rgb
  If r=0 And g=0 And b=0 Then rgb=0*$10000 + 0*$100 + Rand(100,255):WritePixel x,y,rgb
  If r>17-2 And g > 17-2 And b >17-2 And r<26 And g<26 And b<26 Then rgb=100*$10000 + Rand(246,255)*$100 + 0:WritePixel x,y,rgb
  If r>24-2 And g > 24-2 And b >24-2 And r<29 And g<29 And b<29 Then rgb=0*$10000 + Rand(236,245)*$100 + 0:WritePixel x,y,rgb
  If r>26-2 And g > 26-2 And b >26-2 And r<34 And g<34 And b<34 Then rgb=0*$10000 + Rand(226,235)*$100 + 0:WritePixel x,y,rgb
  If r>30-2 And g > 30-2 And b >30-2 And r<44 And g<44 And b<44 Then rgb=0*$10000 + Rand(216,225)*$100 + 0:WritePixel x,y,rgb
  If r>40-2 And g > 40-2 And b >40-2 And r<54 And g<54 And b<54 Then rgb=0*$10000 + Rand(206,215)*$100 + 0:WritePixel x,y,rgb
  If r>50-2 And g > 50-2 And b >50-2 And r<64 And g<64 And b<64 Then rgb=0*$10000 + Rand(190,205)*$100 + 0:WritePixelFast x,y,rgb
  If r>60-2 And g > 60-2 And b >60-2 And r<74 And g<74 And b<74 Then rgb=0*$10000 + Rand(180,195)*$100 + 0:WritePixelFast x,y,rgb
  If r>70-2 And g > 70-2 And b >70-2 And r<84 And g<84 And b<84 Then rgb=0*$10000 + Rand(170,185)*$100 + 0:WritePixelFast x,y,rgb
  If r>80-2 And g > 80-2 And b >80-2 And r<94 And g<94 And b<94 Then rgb=0*$10000 + Rand(160,175)*$100 + 0:WritePixelFast x,y,rgb
  If r>90-2 And g > 90-2 And b >90-2 And r<104 And g<104 And b<104 Then rgb=0*$10000 + Rand(150,165)*$100 + 0:WritePixelFast x,y,rgb
  If r>100-2 And g > 100-2 And b >100-2 And r<114 And g<114 And b<114 Then rgb=0*$10000 + Rand(140,155)*$100 + 0:WritePixelFast x,y,rgb
  If r>110-2 And g > 110-2 And b >110-2 And r<124 And g<124 And b<124 Then rgb=0*$10000 + Rand(130,145)*$100 + 0:WritePixelFast x,y,rgb
  If r>120-2 And g > 120-2 And b >120-2 And r<134 And g<134 And b<134 Then rgb=0*$10000 + Rand(120,135)*$100 + 0:WritePixelFast x,y,rgb
  If r>130-2 And g > 130-2 And b >130-2 And r<144 And g<144 And b<144 Then rgb=0*$10000 + Rand(110,125)*$100 + 0:WritePixelFast x,y,rgb
  If r>140-2 And g > 140-2 And b >140-2 And r<154 And g<154 And b<154 Then rgb=0*$10000 + Rand(100,115)*$100 + 0:WritePixelFast x,y,rgb
  If r>150-2 And g > 150-2 And b >150-2 And r<164 And g<164 And b<164 Then rgb=0*$10000 + Rand(90,105)*$100 + 0:WritePixelFast x,y,rgb
  If r>160-2 And g > 160-2 And b >160-2 And r<174 And g<174 And b<174 Then rgb=0*$10000 + Rand(80,95)*$100 + 0:WritePixelFast x,y,rgb
  If r>170-2 And g > 170-2 And b >170-2 And r<184 And g<184 And b<184 Then rgb=0*$10000 + Rand(70,85)*$100 + 0:WritePixelFast x,y,rgb
  If r>180-2 And g > 180-2 And b >180-2 And r<194 And g<194 And b<194 Then rgb=0*$10000 + Rand(60,75)*$100 + 0:WritePixelFast x,y,rgb
  If r>190-2 And g > 190-2 And b >190-2 Then rgb=0*$10000 + Rand(50,65)*$100 + 0:WritePixelFast x,y,rgb
 Next
Next
save = SaveImage(image,name$)
If save = 1 Then Print "Image wurde gespeichert!!!"
If save = 0 Then Print "Image wurde nicht gespeichert!!!"
End Function


der code is sehr unschön ich weiss

mfg dimaster Embarassed aba hab ihn halt nur schnell in n paar min geschrieben und net viel dabei überlegt

EDIT: hab das ganze mal ohne die vielen ifs versucht und herausgefunden, dass der speed sehr darunter leidet.

Bob

BeitragFr, März 03, 2006 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

Zitat:

If r>17-2 And g > 17-2 And b >17-2 And r<26 And g<26 And b<26 Then rgb=100*$10000 + Rand(246,255)*$100 + 0:WritePixel x,y,rgb



If r>17-2 And g > 17-2 And b >17-2
Wieso überal -2?
Waum nicht direkt >15?

Noch einfacher:
A = 15
If r>A And g > A And b >A ......

.....r<26 And g<26 And b<26
Hier dasselbe.

Ganze Zeile:
A =15
Z = 26
If r>A And g >A And b >A And r<Z And g<Z And b<Z Then rgb=100*$10000 + Rand(246,255)*$100 + 0:WritePixel x,y,rgb

Wozu dient die Addition der 0?
*$100 + 0:
1 + 0 = 1

Meide überflüssige Berechnungen. Schau die auch den SELECT Befehl an.

[EDIT]
Um noch mehr Speed zu bekommen verwende ReadPixelFast und WritePixelFast. Du musst nur zuvor den ImageBuffer() noch "locken" und am Ende des Locken wieder aufheben.
Er soll an den Spielen teilnehmen bis er spielend stirbt. MCP - TRON

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group