Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用字节数组设置BuffereImage的像素颜色_Java_Bufferedimage_Bytebuffer - Fatal编程技术网

Java 使用字节数组设置BuffereImage的像素颜色

Java 使用字节数组设置BuffereImage的像素颜色,java,bufferedimage,bytebuffer,Java,Bufferedimage,Bytebuffer,我已使用以下代码将图像转换为数组: BufferedImage bufferedImage = null; try { bufferedImage = ImageIO.read(new File("name.jpeg")); } catch (IOException e) { } byte[] b = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData(); 阵列中每个像素包含3个字节。

我已使用以下代码将图像转换为数组:

BufferedImage bufferedImage = null;       
try {
   bufferedImage = ImageIO.read(new File("name.jpeg"));
} catch (IOException e) { }

byte[] b = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData();

阵列中每个像素包含3个字节。我的问题是如何将单个像素设置为白色,因为问题是Java中的字节是有符号的,因此只允许-128和127之间的值。但是我想把我的像素设置为255,255,255。如果将所有三个值都设置为127,像素将变为灰色。

将值设置为
-1
,这是无符号
255
字节的最大值


或者,如果您想使代码更明显,
(byte)255也可以使其工作。

将值设置为
-1
,这是无符号
255
字节的最大值


或者,如果您想让代码更加清晰,那么
(byte)255也可以让它工作。

您还可以使用Java的内置功能来帮助管理此类内容。不确定您是否需要特定的
byte[]
数组,但它是您可以利用的很酷的对象。

您也可以使用Java的内置功能来帮助管理此类内容。不确定您是否需要一个
byte[]
数组,但这是一个很酷的对象,您可以利用它。

ManHow没有看到这一点。我试着用-1,但没有注意到它实际上变成了白色。我现在觉得自己很愚蠢。。。谢谢:)我怎么没看到。我试着用-1,但没有注意到它实际上变成了白色。我现在觉得自己很愚蠢。。。谢谢:)是的,我需要字节数组,因为我正在尝试实现一些低级过滤器,并且需要能够操作每个像素。
buffereImage
不适用于
ByteBuffers
(或者至少在我上次选中时不适用)。
DataBuffer
类是一个完全不同的品种。@Kayaman他们现在很幸运:-)如果您愿意,您可以单独循环每个字节并对其应用逻辑,但似乎您已经在-1中找到了一个很好的答案:-)我在JDK 8中没有看到任何对
ByteBuffer
的引用。一直以来都是光栅和数据缓冲。我相信ByteBuffer就是在jdk 7中引入的。不过它是用jdk 8编译的。我相信我已经使用JDK1.8.102测试了使用ByteBuffer和BuffereImage的代码,我没有遇到任何问题。我可以pm你的代码,这样你可以看一看,如果你愿意的话,这样我们就不会把注释弄得乱七八糟。我需要字节数组,因为我正在尝试实现一些低级过滤器,需要能够处理每个像素。
BufferedImage
不适用于
ByteBuffers
(或者至少在我上次检查时不适用)。
DataBuffer
类是一个完全不同的品种。@Kayaman他们现在很幸运:-)如果您愿意,您可以单独循环每个字节并对其应用逻辑,但似乎您已经在-1中找到了一个很好的答案:-)我在JDK 8中没有看到任何对
ByteBuffer
的引用。一直以来都是光栅和数据缓冲。我相信ByteBuffer就是在jdk 7中引入的。不过它是用jdk 8编译的。我相信我已经使用JDK1.8.102测试了使用ByteBuffer和BuffereImage的代码,我没有遇到任何问题。我可以pm你的代码,这样你可以看看,如果你愿意,这样我们就不会混乱的评论