2010-03-31 18 views
7

Android geliştirmeye yeni başladım ve şu anda JavaScript/HTML dünyasından geliyorum, bu yüzden şu anda Android SDK'nın olasılıklarını araştırıyorum.Android Canvas'da Kompozit İşlemler

HTML 5 kanvas kompozit işlemleri destekler (Bkz. here).

Bu Android Canvas'da yapılabilir mi? Canvas sınıfının API'sini taradım, ancak yararlı bir şey bulamadım. En azından kompozit operasyona "kaynak girişi" veya (eğer bu mümkün değilse) "kaynak-üstüne" ihtiyacım var.

cevap

8

Bileşen, PorterDuffXfermode kullanan bir Paint ile Canvas üzerinde çizim tarafından işlenir.

Paint p=new Paint(); 
p.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DARKEN)); 
canvas.drawBitmap(bitmap, 0, 0, p); 

Daha fazla bilgi için bkz. here. Ayrıca, bu kompozisyonu kendilerine çeken öğelere uygulayabilmemiz için onPaint'u geçersiz kılmayı başardım.

1

Daha önce bu tür işlemlere bakmadım, ama sanırım onları Rect şeklini kullanarak yapmanın bir yolu var. Tuvale hangi alanların çizilmesi gerektiğini veya kaynak görüntüden nasıl ayrılacağını işaretlemek için dikdörtgenler tanımlayabilirsiniz ve Rect sınıfında yerleşik bazı karşılaştırma özellikleri vardır. Örneğin bir kaynağın taklit edilmesi için, yeni dikdörtgenin yalnızca iki görüntünün kesişen alanına sahip olmasını sağlamak için setIntersect(Rect boundingBoxOfSource, Rect boundingBoxOfDestination) kullanabilirsiniz. Ardından bu dikdörtgeni Canvas'ın çizim komutlarından birinde argüman olarak kullanabilir ve pikselleri yalnızca bu dikdörtgenin içindeki kaynak görüntüden almasını söyleyebilirsiniz. Daha sonra çizimi Z ekseninde çizim komutlarının yürütüldüğü sırayla kontrol edersiniz.

+0

Dikdörtgenlerle basit kırpma yeterli değildir. Karmaşık alfa maskelerine ihtiyacım var. – kayahr

+0

Bağlantınızda gösterilen iki örnek resime bakıyorum - kaynak girişi ve kaynak kodlu örnekler herhangi bir alfa maskelemeye sahip görünmüyordu. Eğer peşinde olan buysa, nasıl yapacağımı bilmiyorum. Tuvaller, görüntülerin halihazırda üst üste çizilen görüntülerin katmanları arasında saydamlığı desteklemektedir, ancak görüntülerin halihazırda saydamlığına sahip olması şartıyla, daha deneyimli bir kişi, harmanlamayı otomatik olarak yapmanın mümkün olup olmadığını belirtmek zorundadır. –

1

Kendim buldum. PorterDuffXfermode, tüm bu kompozit modları uygular.