1

画像のサイズを変更してから出力ストリームに書き戻したいのですが、このためには、スケーリングされた画像をバイトに変換する必要があります。どうすれば変換できますか?

    ByteArrayInputStream bais = new ByteArrayInputStream(ecn.getImageB());
    BufferedImage img = ImageIO.read(bais);
    int scaleX = (int) (img.getWidth() * 0.5);
    int scaleY = (int) (img.getHeight() * 0.5);
    Image newImg = img.getScaledInstance(scaleX, scaleY, Image.SCALE_SMOOTH);

    outputStream.write(newImg);  //cannot resolve

outputStream.write(newImg) の修正方法???

4

2 に答える 2

0

スケーリングには次の方法を使用します。

public static BufferedImage scale(BufferedImage sbi, 
    int imageType,   /* type of image */
    int destWidth,   /* result image width */
    int destHeight,  /* result image height */
    double widthFactor, /* scale factor for width */ 
    double heightFactor /* scale factor for height */ ) 
{
    BufferedImage dbi = null;
    if(sbi != null) {
        dbi = new BufferedImage(destWidth, destHeight, imageType);
        Graphics2D g = dbi.createGraphics();
        AffineTransform at = AffineTransform.getScaleInstance(widthFactor, heightFactor);
        g.drawRenderedImage(sbi, at);
    }
    return dbi;
}

次に、バイト配列に書き込むことができる BufferedImage があります

public static byte[] writeToByteArray(BufferedImage bi, String dImageFormat) throws IOException, Exception {
    byte[] scaledImageData = null;
    ByteArrayOutputStream baos = null;
    try {
        if(bi != null) {
            baos = new ByteArrayOutputStream();
            if(! ImageIO.write(bi, dImageFormat, baos)) {
                throw new Exception("no appropriate writer found for the format " + dImageFormat);
            }
            scaledImageData = baos.toByteArray();
        }
    } finally {
        if(baos != null) {
            try {
                baos.close();
            } catch(Exception e) {
                e.printStackTrace();
            }
        }
    }
    return scaledImageData;
}
于 2013-10-22T10:27:17.753 に答える