Closed Azuki-Azusa closed 6 years ago
这位同学提Issue记得把能复现的所有信息提供上来噢。 首先是代码片段,用的哪张图,在什么系统环境下版本环境下运行的,报错信息,都说说吧,不然别人也帮不了你。 (正确的提issue方法)
我直接脑补型debug就是,你的bitmap图(BufferedImage)非RGB/BGR型的,也就是很可能是带透明度的ARGB型的BufferedImage.TYPE_INT_ARGB或许BufferedImage.TYPE_INT_ARGB_PRE,所以炸了(应该是ImageIO的bug,不确定,有人报了,暂时没人回复)。 所以你的解决方法是,选一张类型为RGB的图,或者Graphics2D重绘成可行类型的图再进行下一步操作。
或者 https://bugs.openjdk.java.net/browse/JDK-8147448?focusedCommentId=13916755&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13916755 直接看这个…人家没写32bit的(A-8 R-8 G-8 B-8)
你直接命令行 > file your.bmp 看看是不是 width x height x 32 ?
/**
* Converts a given Image into a BufferedImage
*
* @param img The Image to be converted
* @return The converted BufferedImage
*/
public static BufferedImage toBufferedImage(Image img)
{
if (img instanceof BufferedImage)
{
return (BufferedImage) img;
}
// Create a buffered image with transparency
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
// Draw the image on to the buffered image
Graphics2D bGr = bimage.createGraphics();
bGr.drawImage(img, 0, 0, null);
bGr.dispose();
// Return the buffered image
return bimage;
}
是这一句原因吗:
BufferedImage bimage = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
@c980129 BufferedImage.TYPE_INT_ARGB
改为BufferedImage.TYPE_INT_RGB
请问如何将Image的object转换成byte数组呢 曾尝试过以下的方法:
ImageIO.write的第二个参数format如果是"bmp"的话似乎无法生效,这个问题在生成文件的时候也遇到过。 如果换成其他文件格式的话,似乎得到的stream是有损的,转化出来的byte数组的长度也短了很多。 如果能解答的话十分感谢。