ResizePixmap ohne smoothing/blurring
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
|
Betreff: ResizePixmap ohne smoothing/blurring
|
Fr, Nov 17, 2017 8:31
Antworten mit Zitat
|
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] [EINKLAPPEN] 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.
|
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
Powered by phpBB © 2001 - 2006, phpBB Group