سؤال

هذه هي الطريقة التي أرسم بها 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)); 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top