I’m making a game that is Pixel-based in Android. I have several 8×8 sprites that need to be resized to fit on a 100×100 area. As a test to see if it would work, I tried to just make the image fill the entire canvas. It kind of worked, but it made the 8×8 sprite turn into a 12×12 sprite, making the pixels look really odd and distorted. Here’s what I have so far:
Bitmap grass = BitmapFactory.decodeResource(getResources(), R.drawable.small);
Paint configuration = new Paint();
configuration.setDither(false);
configuration.setAntiAlias(false);
Matrix myMatrix = new Matrix();
myMatrix.postScale(canvas.getWidth() / grass.getWidth(), canvas.getWidth() / grass.getHeight());
Bitmap resizedBitmap = Bitmap.createBitmap(grass, 0, 0, grass.getWidth(), grass.getHeight(), myMatrix, false);
canvas.drawBitmap(resizedBitmap, 0, 0, null);
If you work on bitmaps then you simply can’t. You’d minimize the distortion by scaling up by non-fractional factor so each pixed would be repeated same number of times (i.e. image 10×10 to 20×20 is scaled by factor of two, but 8×8 to 12×12 is 1,5 so no luck). The solution would be to have all assets in vector form (i.e. SVG) and then render them on run-time according to device density and other specs or prepare separate assets for various type of devices (which would blow application size up a bit)