正文

圖像合成(1)

Android多媒體開發(fā)高級編程 作者:(美)艾佛瑞


合成是將兩幅圖像放在一起的動(dòng)作,它使得我們能夠同時(shí)看到兩幅圖像的特征。

在Android SDK中,可以通過首先在Canvas對象繪制一個(gè)位圖對象,然后在相同的Canvas對象上繪制第二個(gè)位圖對象的方式來實(shí)現(xiàn)合成。唯一的區(qū)別是在繪制第二幅圖像時(shí),需要在Paint對象上指定一個(gè)過渡模式(Xfermode)。

可用作過渡模式的類集合都繼承自Xfermode基類,而且其中包括一個(gè)稱為PorterDuff- Xfermode的類。PorterDuffXfermode類因Thomas Porter和Tom Duff而得名,他們于1984年在ACM SIGGRAPH計(jì)算機(jī)圖形學(xué)出版物上發(fā)表了題為“Compositing digital images(合成數(shù)字圖像)”的文章,詳細(xì)介紹了一系列不同的規(guī)則,用于彼此重疊地繪制圖像。這些規(guī)則定義了哪些圖像的哪些部分將出現(xiàn)在結(jié)果輸出中。

在Android的PorterDuff.Mode類中列舉了Porter和Duff以及其他更多人制定的規(guī)則。

這些規(guī)則包括如下:

●       android.graphics.PorterDuff.Mode.SRC:此規(guī)則意味著只繪制源圖像,在當(dāng)前情況下,它是正在應(yīng)用此規(guī)則的Paint對象。

●       android.graphics.PorterDuff.Mode.DST:此規(guī)則意味著只顯示目標(biāo)圖像,即已在畫布上的初始圖像。

緊跟著SRC和DST規(guī)則,有一套與它們一起工作的規(guī)則,以確定最終將繪制每幅圖像的哪些部分。這些規(guī)則通常適用于圖像具有不同大小或它們存在透明部分時(shí)的情況。

●       android.graphics.PorterDuff.Mode.DST_OVER:將在源圖像的頂部繪制目標(biāo)圖像。

●       android.graphics.PorterDuff.Mode.DST_IN:將僅僅在源圖像和目標(biāo)圖像相交的地方繪制目標(biāo)圖像。

●       android.graphics.PorterDuff.Mode.DST_OUT:將僅僅在源圖像和目標(biāo)圖像不相交的地方繪制目標(biāo)圖像。

●       android.graphics.PorterDuff.Mode.DST_ATOP:將在目標(biāo)圖像與源圖像相交的地方繪制目標(biāo)圖像;在其他地方繪制源圖像。

●       android.graphics.PorterDuff.Mode.SRC_OVER:將在目標(biāo)圖像的頂部繪制源圖像。

●       android.graphics.PorterDuff.Mode.SRC_IN:將僅僅在目標(biāo)圖像和源圖像相交的地方繪制源圖像。

●       android.graphics.PorterDuff.Mode.SRC_OUT:將僅僅在目標(biāo)圖像和源圖像不相交的地方繪制源圖像。

●       android.graphics.PorterDuff.Mode.SRC_ATOP:將在源圖像與目標(biāo)圖像相交的地方繪制源圖像;在其他地方繪制目標(biāo)圖像。

●       android.graphics.PorterDuff.Mode.XOR:將在源圖像和目標(biāo)圖像重疊之外的任何地方繪制它們,而在它們重疊的地方不繪制任何內(nèi)容。

另外4個(gè)規(guī)則定義了當(dāng)一幅圖像放置在另一幅圖像之上時(shí)如何合成這兩幅圖像。

●       android.graphics.PorterDuff.Mode.LIGHTEN:獲得每個(gè)位置上兩幅圖像中最亮的像素并顯示。

●       android.graphics.PorterDuff.Mode.DARKEN:獲得每個(gè)位置上兩幅圖像中最暗的像素并顯示。

●       android.graphics.PorterDuff.Mode.MULTIPLY:將每個(gè)位置的兩個(gè)像素相乘,除以255,然后使用該值創(chuàng)建一個(gè)新的像素進(jìn)行顯示。結(jié)果顏色=頂部顏色×底部顏色/255。

●       android.graphics.PorterDuff.Mode.SCREEN:反轉(zhuǎn)每個(gè)顏色,執(zhí)行相同的操作(將它們相乘并除以255),然后再次反轉(zhuǎn)。結(jié)果顏色=255?(((255?頂部顏色)×(255?底部顏色))/255)

我們在示例應(yīng)用程序中演示如何使用這些規(guī)則。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號