/Ölçekleme, yeniden boyutlandırma sonra kötü görüntü kalitesi bit eşlem
Bir kart oyunu yazıyorum ve kartlarımı farklı koşullarda, farklı boyutlarda olması gerekiyor. Hızlı bir şekilde çizilmiş ve yeniden (animasyon) böylece bit eşlem olarak benim görüntüleri saklamak ediyorum.
Benim sorunum denemek için ne kadar önemli ve benim görüntüleri (matris yoluyla olsun.ölçek yok yani postScale, bir matris.preScale veya createScaledBitmap işlevi) onlar her zaman karmaşık ve bulanık çıkıyor. Yeniden boyutlandırma olmadan çizilen bu ölçek görüntüleri mükemmel görünüyor, çünkü soruna neden gidelim biliyorum.
Her çözüm bu iki iş parçacığı tarif ile çalıştım:
android quality of the images resized in runtime
quality problems when resizing an image at runtime
ama hala hiçbir yerde bulamadım.
Benim bit eşlem (bir hashmap içine) bu kod ile ben mağaza:
cardImages = new HashMap<Byte, Bitmap>();
cardImages.put(GameUtil.hearts_ace, BitmapFactory.decodeResource(r, R.drawable.hearts_ace));
ve bu yöntemle onları çizmek (Kart sınıf):
public void drawCard(Canvas c)
{
//retrieve the cards image (if it doesn't already have one)
if (image == null)
image = Bitmap.createScaledBitmap(GameUtil.cardImages.get(ID),
(int)(GameUtil.standardCardSize.X*scale), (int)(GameUtil.standardCardSize.Y*scale), false);
//this code (non-scaled) looks perfect
//image = GameUtil.cardImages.get(ID);
matrix.reset();
matrix.setTranslate(position.X, position.Y);
//These methods make it look worse
//matrix.preScale(1.3f, 1.3f);
//matrix.postScale(1.3f, 1.3f);
//This code makes absolutely no difference
Paint drawPaint = new Paint();
drawPaint.setAntiAlias(false);
drawPaint.setFilterBitmap(false);
drawPaint.setDither(true);
c.drawBitmap(image, matrix, drawPaint);
}
Herhangi bir fikir büyük mutluluk duyacağız. Teşekkürler
CEVAP
Kullanım createScaledBitmap görüntü çok kötü görünüyor yapacaktır. Bu sorunla karşılaştım ve azimliyim. Kod sorunu çözecektir aşağıda:
public Bitmap BITMAP_RESIZER(Bitmap bitmap,int newWidth,int newHeight) {
Bitmap scaledBitmap = Bitmap.createBitmap(newWidth, newHeight, Config.ARGB_8888);
float ratioX = newWidth / (float) bitmap.getWidth();
float ratioY = newHeight / (float) bitmap.getHeight();
float middleX = newWidth / 2.0f;
float middleY = newHeight / 2.0f;
Matrix scaleMatrix = new Matrix();
scaleMatrix.setScale(ratioX, ratioY, middleX, middleY);
Canvas canvas = new Canvas(scaledBitmap);
canvas.setMatrix(scaleMatrix);
canvas.drawBitmap(bitmap, middleX - bitmap.getWidth() / 2, middleY - bitmap.getHeight() / 2, new Paint(Paint.FILTER_BITMAP_FLAG));
return scaledBitmap;
}
Görüntü sunucuya yüklemeden önce istem...
Nasıl iPhone OS/yeniden boyutlandırma,...
Uİİmage: yeniden Boyutlandırma, Kırpma...
CSS ile orantılı olarak yeniden boyutl...
Orantılı olarak Yukseklik ve Genislik ...