funktion verbessern bzw. effekt verbessern(egal)
Übersicht

![]() |
dimasterBetreff: funktion verbessern bzw. effekt verbessern(egal) |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
||
AvaGast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 ![]() aba trotzdem danke an beide |
||
AvaGast |
![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
jo so hab ichs jetzt auch gemacht funtzt super ![]() danke noch mal an alle mfg dimaster |
||
![]() |
dimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmmm ja hab mir gedacht, dass ich das so machen muss, dachte es gäbe ne schönere lösung ![]() danke |
||
![]() |
dimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() EDIT: hab das ganze mal ohne die vielen ifs versucht und herausgefunden, dass der speed sehr darunter leidet. |
||
![]() |
Bob |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group