Antialiasing mit Maskcolor von ???
Hier ein kleines Programm, mit dem ein Bild mit Antialiasing um die Hälfte verkleinert werden kann. Das besondere ist, dass eine Maskcolor berücksichtigt wird, so dass man nicht das übliche Problem mit der zerschossenen Maske hat.

-Das Bild wird unter neuem Namen mit Anhängsel _A.bmp gespeichert
-Die Kanten müssen eine gerade Anzahl Pixel haben

Der Parameter Skip gibt an, ab wieviel umliegenden MaskPixel die Maskcolor anstelle des errechneten Wertes verwendet wird.

hier v.l. das Originalbild, dann die verkleinerten Bilder mit Skip 0-3
Damit man was erkennt hab ich das dann wieder vergrössert:

[img:e2db593cd3]http://www.mein-murks.de/grafik/winner.png[/img:e2db593cd3]

[code:1:e2db593cd3]
Graphics 400,200,16,3

Const c_mx = 3

skip = 3 ;between 0 and 3
maskcolor = $FF00FF


Dim Col(c_mx)

file$ = CommandLine$()
If Not Len(file$)
file$ = Input$("Datei: ")
Else
Print "Verarbeite Datei: " + file$
EndIf

start = LoadImage(file$)
If Not start Then RuntimeError "Datei nicht gefunden!"

ausgabe = CreateImage(ImageWidth(start)/2,ImageHeight(start)/2)
If Not ausgabe Then RuntimeError "Fehler!"

LockBuffer ImageBuffer(start)
LockBuffer ImageBuffer(ausgabe)

For x = 0 To ImageWidth(ausgabe)-1
For y = 0 To ImageHeight(ausgabe)-1
hx = x Shl 1
hy = y Shl 1
maskcnt = 0

For u = 0 To c_mx
Col(u) = ReadPixelFast(hx+(u Shr 1),hy+(u And 1),ImageBuffer(start)) And $FFFFFF;kein Alphakanal
If col(u) = maskcolor Then maskcnt = maskcnt + 1
Next

If maskcnt > skip Then
WritePixelFast x, y, maskcolor, ImageBuffer(ausgabe)
Else
writecol = 0
For u = 0 To c_mx
If Col(u) <> Maskcolor
Select maskcnt
Case 0
writecol = writecol + ((Col(u) And $FCFCFC) Shr 2)
Case 1
writecol = writecol + (((Col(u) Shr 16) And $FF) / 3) Shl 16 ;R
writecol = writecol + (((Col(u) Shr 8) And $FF) / 3) Shl 8 ;G
writecol = writecol + (Col(u) And $FF) / 3 ;B
Case 2
writecol = writecol + ((Col(u) And $FEFEFE) Shr 1)
Case 3
writecol = Col(u)
End Select
EndIf
Next
WritePixelFast x, y, writecol, ImageBuffer(ausgabe)
EndIf


Next
Next

UnlockBuffer ImageBuffer(start)
UnlockBuffer ImageBuffer(ausgabe)


datei$ = Left (File$,Instr (File$,".")-1) + "_A.bmp"
SaveImage (ausgabe, datei$)
Print datei$ + " erzeugt!"

WaitKey()
[/code:1:e2db593cd3]

Hier noch das Coding zum Download:
[url]http://www.mein-murks.de/quellcode/antialias.bb[/url]
===
von ???
Und wozu brauch man das :?: :cry:
===
von ???
Ich brauch das z.B. für Rendergrafiken, da beim Rendern mit Antialiasing der Hintergrund mit einbezogen wird(kann man in dem verwedeten Programm meines Wissens nicht umstellen). Beim Resizen über das 2-D-Grafikprogramm wird ebenfalls keine Hintergrundfarbe berücksichtigt und ohne Antialiasing schauts *beschissen* aus...
Jetzt render ich in der doppelten Auflösung und lass dann den Algo drübersausen(bzw. kriechen :) ).
Könnte auch nützlich sein um z.B. Grafiken aus dem Internet entsprechend zu verkleinern...
Oder um verkleinerte Bilder seiner Spielgrafiken zu erstellen (z.B. für eine Minimap oder kleinere Auflösungen)
===
von ???
Schönes Programm, und nützlich.
===
von ???
Ich hab mir eben mal überlegt, wie man den verschwommenen Rand wegkriegt. Konnte es nicht testen, weil ich zur Zeit kein 32bit Modus starten kann. Wenn´s also nicht funktioniert, dann bitte nicht schlagen.

[code:1:78f60ed4e1]Function groesse_aendern(inbild%, maskcolor%, breiteneu%, hoeheneu%)
Local breitealt% = ImageWidth(inbild%)
Local hoeheealt% = ImageHeight(inbild%)
Local tmpbild% = CopyImage(inbild%)
Local outbild% = CopyImage(inbild%)
TFormFilter 0
ResizeImage tmpbild%, breiteneu%, hoeheneu%
TFormFilter 1
ResizeImage outbild%, breiteneu%, hoeheneu%
If maskcolor% = 0 Then
tmpmaskcolor%= $FFFFFF
Else
tmpmaskcolor%= 0
EndIf
LockBuffer ImageBuffer(tmpbild%)
For x% = 0 To (breiteneu% - 1)
For y% = 0 To (hoeheneu% -1)
If Not((ReadPixelFast(x%, y%, ImageBuffer(tmpbild%)) And $FFFFFF) = maskcolor%) Then
WritePixelFast(x%, y%, tmpmaskcolor%, ImageBuffer(tmpbild%))
EndIf
Next
Next
UnlockBuffer ImageBuffer(tmpbild%)
MaskImage tmpbild%, 0, 0, tmpmaskcolor%
SetBuffer ImageBuffer(outbild%)
DrawImage tmpbild%, 0, 0
FreeImage tmpbild%
Return outbild%

End Function[/code:1:78f60ed4e1]



Suche:
(unterstützt mySQL Wildcards ala %)
Titel:
Text:
Autor: