问题描述
我很抱歉,如果这个话题已经被提交,但是网络和谷歌团体我所有的搜索并没有帮助我。
I'm sorry if this topic has been brought before, but all my searches on the web and google groups did not help me.
我目前正在开发的Android SDK中的一个小游戏,并使用我相应调整,以匹配设备的分辨率(让系统做到这一点对我来说是高分辨率的位图不是脆就够了)。
I'm currently developing a little game with the Android SDK, and use hi-res bitmaps that I resize accordingly to match the device's resolution (letting the system do it for me isnot "crisp" enough).
我使用SurfaceView,其上我画在一次通过画布填充整个表面上。该涂料采用setXfermode(新PorterDuffXfermode(PorterDuff.Mode.SRC_IN)),以便屏蔽。在此之前,我找回各种各样的位图 - 这是调整大小在初始化与createScaledBitmap(),并放入高速缓存 - 我使用位图用涂料这个画布上,在SurfaceView绘制这个画布前。
I use a SurfaceView, on which I paint in one pass a canvas filling the whole surface. The paint uses setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)) to allow masking.Beforehand, I retrieve various bitmaps -- which are resized at initialization with createScaledBitmap() and put in a cache -- and I apply the bitmaps with a paint on this canvas, before drawing this canvas on the SurfaceView.
我的问题是,无论我试试,不管漆设置我使用(抖动,反锯齿等),调整大小后的位图不抗锯齿和绘图present锯齿状边缘。我什么都试过。唯一的小成功,我是用inSampleSize接近所需的缩放大小和强制抗锯齿的第一遍,在检索调用createScaledBitmap前高分辨率的位图,但它不是不够漂亮。我只是不能让创建pre大小的位图众人分辨率的每个组合。我错过了什么?
My problem is, whatever I try, whatever paint settings I use (dithering, antialias, etc..), the resized bitmaps are not antialiased and the drawing present jagged edges. I tried everything.The only little success I had was using inSampleSize to approach the desired scaled size and force a first pass of antialiasing, before invoking createScaledBitmap on the retrievedhi-res bitmap, but it is not beautiful enough. I just can't allow to create multitudes of pre-sized bitmaps for every combination of resolution. What did I miss ?
感谢很多提前
推荐答案
首先,当你加载的位图,你要确保你不设置选项丢失任何的图像质量argb_8888:
First when you load your bitmap you make sure that you don't lose any image quality by settings options to argb_8888:
Options options = new Options();
options.inScaled = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap pic = BitmapFactory.decodeResource(getResources(), R.id.pic, options);
当您缩放过滤器上的位图依次为:
When you scale the bitmap turn on the filter:
pic = Bitmap.createScaledBitmap(pic, screenW, screenH, true);
但是,如果一个streaches图像过多不可避免地会降低质量。
However if one streaches the image too much inevitably it degrades in quality.
当您使用底漆可以提高质量,而且通过打开ditherig和过滤丧失速度:
When you use paint you can improve quality but lose on speed with turning on ditherig and filtering:
Paint paint = new Paint();
paint.setFlags(Paint.DITHER_FLAG);
paint.setFilterBitmap(true);
最后,整个活动窗口,可以在argb_4444而不是在argb_8888(; 2.3 OS&LT)设置。如果你instert这条线,你可以恰克此之前的setContentView:
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);
这篇关于绘图缩放位图上的SurfaceView - 无抗锯齿的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!