Skip to content Skip to sidebar Skip to footer

Drawing Scaled Bitmaps On A Surfaceview -- No Antialiasing

I'm sorry if this topic has been brought before, but all my searches on the web and google groups did not help me. I'm currently developing a little game with the Android SDK, and

Solution 1:

First when you load your bitmap you make sure that you don't lose any image quality by settings options to argb_8888:

Optionsoptions=newOptions();    
options.inScaled = false; 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmappic= BitmapFactory.decodeResource(getResources(), R.id.pic, options);

When you scale the bitmap turn on the filter:

pic = Bitmap.createScaledBitmap(pic, screenW, screenH, true);

However if one streaches the image too much inevitably it degrades in quality.

When you use paint you can improve quality but lose on speed with turning on ditherig and filtering:

Paintpaint=newPaint(); 
paint.setFlags(Paint.DITHER_FLAG);
paint.setFilterBitmap(true);

Finally the entire activity window could be set on argb_4444 instead on argb_8888 (OS < 2.3). You can chage this if you instert this line before setContentView:

getWindow().setFormat(PixelFormat.RGBA_8888); 

Solution 2:

If it comes down to it, you can manually antialias without too much trouble. Just apply a simple lowpass filter (something like an NxN average) to the pixel data before asking the bitmap object to rescale itself.

Solution 3:

you may clear canvas buffer by youself! such as follows:

canvas.drawColor(Color.TRANSPARENT, android.graphics.PorterDuff.Mode.CLEAR);

Post a Comment for "Drawing Scaled Bitmaps On A Surfaceview -- No Antialiasing"