العمليات المركبة في Android Canvas
-
23-09-2019 - |
سؤال
أنا فقط أبدأ بتطوير Android وأنا قادم من JavaScript/HTML World ، لذا أقوم حاليًا بالتحقيق في إمكانيات Android SDK.
يدعم HTML 5 Canvas العمليات المركبة (انظر هنا).
هل هذا ممكن في قماش Android؟ قمت بمسح واجهة برمجة تطبيقات فئة القماش ولكن لم أتمكن من العثور على أي شيء مفيد. أحتاج على الأقل العملية المركب "مصدر في" أو (إذا لم يكن ذلك ممكنًا) "Source-Atop".
المحلول
يتم التعامل مع التكوين من خلال الرسم على أ Canvas
مع Paint
الذي يستخدم PorterDuffXfermode
.
Paint p=new Paint();
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN));
canvas.drawBitmap(bitmap, 0, 0, p);
يرى هنا لمزيد من المعلومات. تمكنت أيضًا من تجاوز onPaint
حتى نتمكن من تطبيق هذا التكوين على العناصر التي ترسم humeselves.
نصائح أخرى
لم أتطلع إلى القيام بهذه الأنواع من العمليات من قبل ، لكنني أعتقد أن هناك طريقة للقيام بها باستخدام المستقيم شكل. يمكنك تحديد المستطيلات لتمييز المناطق التي يجب رسمها إلى القماش ، أو أيها لإخراج الصورة المصدر ، و Rect
يحتوي الفصل على بعض ميزات المقارنة المدمجة. على سبيل المثال لتقليد مصدر ، يمكنك استخدامه setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination)
لجعل المستطيل الجديد الخاص بك لا يحتوي إلا على المنطقة المتقاطعة للصورتين. بعد ذلك ، يمكنك استخدام هذا المستطيل كوسيطة في أحد أوامر السحب الخاصة بـ Canvas ، واطلوها أن تأخذ وحدات البكسل فقط من الصورة المصدر الموجودة داخل هذا المستطيل. يمكنك بعد ذلك التحكم في الرسم في المحور z بالترتيب الذي يتم به تنفيذ أوامر السحب.
وجدت ذلك بنفسي. يقوم PorterDuffXferMode بتنفيذ كل هذه الأوضاع المركبة.