ResizePixmap ohne smoothing/blurring

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Trust

Betreff: ResizePixmap ohne smoothing/blurring

BeitragFr, Nov 17, 2017 8:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Freunde,


da der Befehl PixmapResize beim vergrößern der Pixmap die Übergänge smoothed bzw. blurred gibts hier eine Variante die genau das nicht macht.
Dies kann zB. gewünscht sein, wenn man mit Pixel Art arbeitet und den deutlichen Treppeneffekt beibehalten möchte.

Den unten geposteten Code einfach copy+paste in den eigenen Code und benutzen wie ResizePixmap:

BlitzMax: [AUSKLAPPEN]

Rem
bbdoc: Resize a pixmap
returns: A new pixmap object of the specified @width and @height
End Rem

Function ResizePixmap2:TPixmap( pixmap:TPixmap, width:Int, height:Int )
Local in_pixmap:TPixmap = pixmap
If in_pixmap.format <> PF_STDFORMAT Then in_pixmap = pixmap.Convert( PF_STDFORMAT )
Local tmp:Byte[width*4]
Local x_sc:Float = Float(in_pixmap.width)/width
Local y_sc:Float = Float(in_pixmap.height)/height

Local out_pixmap:TPixmap = CreatePixmap( width, height, pixmap.format )

For Local y:Int = 0 Until height
Local ty:Float = (y+0.5) * y_sc-0.5
Local iy:Float = Floor(ty)
Local fy:Float = ty-iy
Local in_pitch:Int = in_pixmap.pitch

If iy < 0
iy=0
fy=0
in_pitch=0
Else If iy >= in_pixmap.height-1
iy = in_pixmap.height-1
fy=0
in_pitch=0
EndIf

Local src:Byte Ptr = in_pixmap.PixelPtr(0, iy)
Local dst:Byte Ptr = tmp
For Local x:Int = 0 Until width
Local tx:Float = (x+0.5)*x_sc-0.5
Local ix:Float = Floor(tx)
Local fx:Float = tx-ix
Local in_off:Int = 4

If ix < 0
ix=0
fx=0
in_off=0
Else If ix >= in_pixmap.width-1
ix=in_pixmap.width-1
fx=0
in_off=0
EndIf

Local p:Byte Ptr = src + Int(ix)*4
For Local n:Int = 0 Until 4
Local v0:Float = p[n]
Local v1:Float = v0
Local v2:Float = v0
Local v3:Float = v0
Local va:Float = (v1-v0)*fx+v0
Local vb:Float = (v3-v2)*fx+v2
Local vt:Float = (vb-va)*fy+va
dst[n]=vt
Next
dst = dst + 4
Next
ConvertPixels tmp, PF_STDFORMAT,out_pixmap.Pixelptr(0,y), out_pixmap.format, width
Next
Return out_pixmap
End Function



Gruß Trust
Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group