2017-09-27 50 views
0
public class Loader { 

    public static byte[] loadImage(String path) { 
     Image image; 
     try { 
      image = new Image(new FileInputStream(path)); 
      int width = (int) image.getWidth(); 
      int height = (int) image.getHeight(); 
      byte[] data = new byte[width * height * 4]; 
      image.getPixelReader().getPixels(0, 0, width, height, PixelFormat.getByteBgraPreInstance(), data, 0, width * 4); 
      return data; 
     }catch(IOException e) { 
      e.printStackTrace(); 
      System.exit(-1); 
     } 
     return null; 
    } 

} 


@Override 
    public void render(GraphicsContext gc) { 
     gc.clearRect(0, 0, width, height); 
     gc.getPixelWriter().setPixels(x++, 0, 819 ,720, PixelFormat.getByteBgraPreInstance(), data, 0, 819*4); 
     gc.getPixelWriter().setPixels(400, 0,819 ,720, PixelFormat.getByteBgraPreInstance(), data, 0, 819*4); 
    } 

您好,目前我有一個來自JavaFx的PixelWriter/PixelReader的問題。我嘗試從圖像中讀取像素並將其存儲在緩衝區中,之後我想將其渲染到屏幕上。但圖像現在不包含Alpha值,因此也沒有透明像素。我在互聯網上搜索了幾個小時,但我找不到答案。也許格式有問題。 在此先感謝。JavaFX PixelReader Alpha通道不能正常工作

+0

格式可能有問題。在Image類支持的4種格式中,只有兩種格式具有定義透明度的機制 - GIF可能具有透明顏色(因此alpha = 1或alpha = 0),PNG可能包含完整的alpha通道。如果您正在閱讀BMP或JPG文件,則不會有字母值。即使在讀取PNG文件時,如果原始文件沒有Alpha通道,也不會在不同像素的Alpha中看到任何變化。 – Itai

+0

已經檢查過PNG文件,它有一個Alpha通道。忘了說,我知道只有閱讀Alpha Channel的圖像。但無論如何感謝。 –

回答

0

我還沒有嘗試過(因爲您沒有提供完整和可執行的示例),但我認爲您的問題是您使用的像素格式與預乘alpha。用不帶前置乘法的簡單rgb格式再試一次。