2013-02-07 145 views
1

我一直在嘗試一些使用java的基本圖像處理(經過長時間的差距)。Java中的圖像透明度或不透明度問題

對原始圖像進行的任何操作並將其保存爲新圖像 - > o/p圖像始終顯示爲DULL(可能是不透明或透明度的問題)。

我粘貼裏面我是用做下面這個工作的函數://返回一個模糊的Java緩衝圖像

public static BufferedImage blurImage(BufferedImage image) 
{ 
    int w = image.getWidth(); 
    int h = image.getHeight(); 
    int alpha = 0; 
    int red, green, blue, newPix; 
    int pix[] = null; 

    BufferedImage newImage = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); 

    for(int i=0,j=0; i<w; i++) 
    { 
     for(j=0; j<h; j++) 
     { 
      pix = getSurroundingPixels(image, i>0?i-1:0, i<w-1?i+1:w-1, j>0?j-1:0, j<h-1?j+1:h-1); 
      red = green = blue = 0; 
      for(int k=0; k<pix.length; k++) 
      { 
       red += (pix[k]>>16) & 0xFF; 
       green += (pix[k]>>8) & 0xFF; 
       blue += (pix[k]) & 0xFF; 
      } 
      alpha = (image.getRGB(i,j)>>24) & 0xFF; 
      red /= pix.length; 
      green /= pix.length; 
      blue /= pix.length; 
      newPix = ((alpha<<24) | (red<<16) | (green<<8) | blue); 
      newImage.setRGB(i,j, newPix); 
     } 
    } 

    return newImage; 
} 

我希望有人幫助我在這個問題上

+1

嘗試'ConvolveOp',如[在此]引用的文章中所示(http://stackoverflow.com/a/14412962/230513)。 – trashgod

+0

我一定會嘗試ConvolveOp,但我的意圖是不使用替代品。我想弄清楚這裏出了什麼問題。事實上,我寫了類似的功能,如旋轉,鏡像功能。即使那些正在返回一個DULL圖像。 – sudhishkr

+2

請修改您的問題以包含一個[sscce](http://sscce.org/),其中展示了您使用獨立或其他方式訪問的圖像所描述的問題。 – trashgod

回答

2

我現在已經取代BufferedImage.INT_TYPE_ARGBBufferedImage.INT_TYPE_RGB,在這之後,[處理]圖像不顯得呆板,並且[它]看起來正常。你能解釋爲什麼會發生這種情況嗎?

TYPE_INT_ARGB具有DirectColorModel與阿爾法; TYPE_INT_RGB有一個DirectColorModel沒有阿爾法。您的算法縮放RGB,但克隆A。猜測,您的測試圖像是不透明的,可能是.jpg圖片,需要BufferedImage.TYPE_INT_RGB。您可能需要使用此example來檢查您的圖像,該圖標的比例爲A或此example,其中顯示setRGB()完成的顏色轉換。