问题描述
编辑 3:
int rRows = result.length;
int rColums = result[0].length;
BufferedImage img = new BufferedImage(rColums,rRows,BufferedImage.TYPE_BYTE_GRAY);
for (int r = 0; r < rRows; r++) {
for (int t = 0; t < result[r].length; t++) {
img.setRGB(t,r,result[r][t]);
编辑 2:
像这样创建图像....
BufferedImage img = new BufferedImage(rColums,BufferedImage.TYPE_BYTE_GRAY)
private static int[][] convertToArray(BufferedImage inputImage) {
final byte[] pixels = ((DataBufferByte) inputImage.getRaster().getDataBuffer()).getData();
final int width = inputImage.getWidth();
final int height = inputImage.getHeight();
System.out.println("height" + height + "width");
int[][] result = new int[height][width];
for (int pixel = 0,row = 0,col = 0; pixel < pixels.length; pixel++) {
int argb = 0;
argb = (int) pixels[pixel];
result[row][col] = argb;
col++;
if (col == width) {
col = 0;
row++;
}
}
return result;
编辑:
我已经意识到我要问的是如何从有符号灰度到无符号灰度,正如我所说的添加 256 对我不起作用,而且这似乎仍然会使图像变暗,因为它不会升高+127 个有符号值到 256 个无符号值的值。(希望我已经正确表达了这一点。
根据标题,我通过
从缓冲图像中提取了一个 int[][] ((DataBufferByte) inputImage.getRaster().getDataBuffer()).getData()
数组的范围从 -128 到 127。问题是当我尝试基于 int[][] 通过将其传递给 BufferedImage 来重建图像时,它显得太暗了,更像是一个黑白(主要是黑色)图像。
在将 byte[] 转换为 in[][] 的过程中,我看到建议将 256 添加到 DataBufferByte 生成的 byte[] 的每个子零值上,但这实际上产生了一个全黑的图像,我没有真的明白它的逻辑,就像你不想把整个比例移到 128,而不仅仅是负数吗??
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)