我正在尝试将图像的每个像素连接在一起以形成二进制字符串。 但是,以下代码不会产生任何结果。 如果我将System.out.println放在//位置,它会打印出一些东西,但我确定这是不正确的。
我认为这是关于循环的......
这是什么问题? 我该如何修改我的代码?
public static void main(String[] argv){
BufferedImage img1 = null;
try {
img1 = ImageIO.read(new File("/Users/Sam/Desktop/Image2/00001.png"));
} catch (IOException e) {
e.printStackTrace();
}
int width1 = img1.getWidth();
int height1 = img1.getHeight();
String con = "";
for (int i = 0; i < height1; i++) {
for (int j = 0; j < width1; j++) {
int rgb1 = img1.getRGB(j, i);
con += Integer.toBinaryString(rgb1);
}
//System.out.println(con);
}
System.out.println(con);
}
答案 0 :(得分:1)
这是我们用来将图像文件序列化为字符串的类,因此我们可以将图像嵌入到html文件中。
import org.apache.commons.codec.binary.BinaryCodec;
import java.io.IOException;
import java.io.InputStream;
public class ImageUtil {
public static String getEmbeddedImage(String resourcePath) {
InputStream is = null;
try {
is = ImageUtil.class.getClassLoader().getResourceAsStream(resourcePath);
if (is != null) {
byte buffer[] = new byte[is.available()];
String fileExtension = getImageTypeFromFileName(resourcePath);
String encodedImage = BinaryCodec.toAsciiString(buffer);
encodedImage = "data:image/".concat(fileExtension).concat(encodedImage);
return encodedImage;
}
} catch(IOException e) {
} finally {
if(is != null) {
try { is.close(); } catch(IOException e) {}
}
}
return null;
}
public static String getImageTypeFromFileName(String imagePath) {
String parts[] = imagePath.split("\\.");
return parts[parts.length-1].toLowerCase();
}
}
答案 1 :(得分:0)
ImageIO
并不保证您的图片会在返回时加载。
您应该使用ImageObserver
或MediaTracker
来检查文件是否已加载。
你可能需要等待!
在循环执行时,您是否检查过width1
和height1
是否为合理值?