0

次のコード スニペットを使用して、png 画像を jpeg に変換しています。

ByteArrayOutputStream image1baos = new ByteArrayOutputStream();

image1 = resizeImage(cropImage(image1, rect1), 150);

ImageWriter writer = null;
Iterator<ImageWriter> iter = ImageIO.getImageWritersByFormatName("jpg");
if (iter.hasNext()) {
  writer = (ImageWriter) iter.next();
}

ImageOutputStream ios = ImageIO.createImageOutputStream(image1baos);
writer.setOutput(ios);

// set the compression quality
ImageWriteParam iwparam = new MyImageWriteParam();
iwparam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
iwparam.setCompressionQuality(0.2f);

// write image 1
writer.write(null, new IIOImage(image1, null, null), iwparam);

ios.flush();

// set image 1
c.getItem1().setImageData(image1baos.toByteArray());

アルファチャンネルをデフォルトの黒ではなく白に変換したいのですが、それを行う方法が見つかりませんでした。どんな助けにも感謝します!

4

1 に答える 1

2

私の解決策は醜く、おそらく遅いですが、それは解決策です:)

    BufferedImage img = <your image>
    for( int i = 0; i < img.getWidth( ); i++ )
        for( int j = 0; j < img.getHeight( ); j++ ) {
            // get argb from pixel
            int coli = img.getRGB( i, j );
            int a = coli >> 24 & 0xFF;
            int r = coli >> 16 & 0xFF;
            int g = coli >> 8 & 0xFF;
            int b = coli & 0xFF;
            coli &= ~0xFFFFFFFF;
            // do what you want with a, r, g and b, in your case :
            a = 0xFF;
            // save argb
            coli |= a << 24;
            coli |= r << 16;
            coli |= g << 8;
            coli |= b << 0;
            img.setRGB( i, j, coli );
        }
    }

もちろん、アルファ チャネルを調整する必要があるだけであれば、コードを 60% 削減できます。後で参照できるように、すべての RGB を保存しました。

于 2011-10-14T12:00:05.633 に答える