2013-05-11 66 views
1

我想從具有透明背景的PNG圖像創建位圖。當我在下面使用這種方法時,會使背景變黑。我試過用顏色透明的drawColor(),但它不起作用。也許我只是忽略了一些東西。所以,我的問題是:如何將透明度保存在位圖中?我將它保存爲PNG。如何從其他圖像創建位圖並保持透明背景?

private Bitmap createCircularCroppedBitmap(Bitmap bitmap) {  
    Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
      bitmap.getHeight(), Config.ARGB_8888); 
    Canvas canvas = new Canvas(output); 
    final Paint paint = new Paint(); 
    paint.setAntiAlias(true); 
    final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());   
    canvas.drawARGB(0, 0, 0, 0); 
    canvas.drawCircle(bitmap.getWidth()/2, bitmap.getHeight()/2, 
      bitmap.getWidth()/2, paint); 
    paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
    canvas.drawBitmap(bitmap, rect, rect, paint);   
    return output; 
} 

回答

0

alpha通道最初由0xff填充。所以你可以試試這個

canvas.drawColor(0, Mode.CLEAR); 
paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)) 
+0

我搞砸了,仍然無法讓它工作。但是,如果我使用可繪製資源的圖像創建位圖,則它工作得很好。但不是從apk之外的圖像,例如從設備的圖像庫中檢索的圖像。謝謝你的迴應,斯蒂恩。 – AndroidKen 2013-05-13 01:38:58

+0

解決了一些問題後,我認爲問題來自畫廊的裁剪功能。在傳遞數據時它失去了透明度。 – AndroidKen 2013-05-24 20:04:08

+0

@AndroidKen試試我的答案! – 2014-09-30 07:20:43

1

幾天後。發佈此問題後,我找到了解決方案。 問題不在Bitmap.createScaledBitmap()中,問題出在image.compress()。我使用的是image.compress(CompressFormat.JPEG,80,fos),但如果我使用image.compress(CompressFormat.PNG,100,fos),那麼我的問題就解決了。

+0

這實際上是我使用的。我從來沒有能夠糾正這個問題。就像我之前所說的,我認爲是用HTC的畫廊應用來裁剪。它會使圖像層變平...因爲它可以很好地與其他圖像一起工作。當然,我還沒有在一段時間內搞砸這個問題。但它仍然是一個問題。 – AndroidKen 2014-09-30 16:36:29