ارسم خلفات نقطية مقاس بسلاسة على قماش
-
28-09-2019 - |
سؤال
هذه هي الطريقة التي أرسم بها Bitmap
على Canvas
في تطبيق Android الخاص بي:
canvas.save();
canvas.scale(scale, scale, x, y);
canvas.drawBitmap(bitmap, x, y, null);
canvas.restore();
لكن Bitmap
لا يتم تحجيمها بسلاسة ، لا يتم إجراء أي مضادات. كيف يمكنني تمكين مكافحة التنسج؟
المحلول
جرب هذا:
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setFilterBitmap(true);
paint.setDither(true);
canvas.drawBitmap(bitmap, x, y, paint);
نصائح أخرى
كلاهما Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
أو paint.setFilterBitmap(true);
عملت من أجلي ولكن كن حذرا للغاية ، في لعبتي تقلل من FPS 30FPS
إلى 17FPS
فقط. لذلك إذا كانت مهمة رسم حرج كما في اللعبة ، فمن الأفضل أن تقوم بتوسيع نطاق الصورة في وقت التحميل. ما فعلته بالطريقة التالية:
public Bitmap getImage (int id, int width, int height) {
Bitmap bmp = BitmapFactory.decodeResource( getResources(), id );
Bitmap img = Bitmap.createScaledBitmap( bmp, width, height, true );
bmp.recycle();
return img;
}
هل حاولت إنشاء ملف Paint
كائن ، الاتصال setAntiAlias(true)
عليها ونقلها إلى drawBitmap
الطريقة مثل المعلمة الرابعة؟ إذا لم ينجح هذا ، أعتقد أنه يجب عليك خفض drawBitmap
اتصل بدلاً من تحجيم القماش ، على سبيل المثال باستخدام drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
.
يستخدم:
canvas.drawBitmap(source, 0, 0, new Paint(Paint.ANTI_ALIAS_FLAG));