2017-01-19 6 views
0

私は3つのBufferedImagesを取得しました:A、C、Dはすべてカラーとアルファチャンネルの画像です。 Cは、α-オーバーDを有するが、Aの透明層とアイデアはである:私は BufferedImageは他のBufferedImageからアルファを設定しました

  • アルファその上
  • のものにCのアルファチャンネルを設定

    • アルファミキシングをnew BufferedImage().createGraphics().drawImage(D).drawImage(C);としてください。しかし、私はどのようにCのアルファを設定するのですか?

      BufferedImageを使用する提案はありますが、すべてのピクセルを繰り返し処理しないようにして、手動で計算を実行してパフォーマンスを向上させることをお勧めします。あなたは次の操作を行うことができ、均一アルファを持つ画像に対して

    +0

    [この1つ](http://stackoverflow.com/questions/660580/change-the-alpha-value-of-a-bufferedimage)と同様の記事をご覧ください。 –

    答えて

    0

    BufferedImage bim=null; 
    try { 
        bim=ImageIO.read(new File("...")); 
    } 
    catch (Exception ex) { System.err.println("error in bim "+ex); } 
    int wc=bim.getWidth(), hc=bim.getHeight(); 
        BufferedImage b=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB); 
        b.getGraphics().drawImage(bim, 0, 0, null); 
        BufferedImage b2=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB); 
        RescaleOp no=new RescaleOp(new float[]{1f, 1, 1, 1f}, new float[]{0, 0, 0, -50}, null); 
        b2=no.filter(b, null); 
    
        BufferedImage b3=new BufferedImage(wc, hc, BufferedImage.TYPE_INT_ARGB); 
        b3.getGraphics().drawImage(bim, 0, 0, null); 
        float offset=(b2.getRGB(0, 0)&0xff000000)>>24, a=(b3.getRGB(0, 0)&0xff000000)>>24; 
        no=new RescaleOp(new float[]{1, 1, 1, 1}, new float[]{0, 0, 0, -a+offset}, null); 
        b3=no.filter(b3, null); 
    

    今、B3はB2のアルファを持っています。

    アルファ不均一な画像の場合、ピクセルごとにピクセルを処理する必要があります。

    +0

    「ユニフォームアルファ」とはどういう意味ですか? 「アルファはどこでも同じです」場合はそうではありません。 – piegames

    +0

    そうですね、ピクセル別ピクセル私は他の選択肢がありません – gpasch

    関連する問題