如何在java中创建新的灰度(BuffereImage.TYPE_BYTE_GRAY)图像?
我想创建灰度图像,但问题是如何为像素指定值(0-255)并在读取同一图像时读取它如何在java中创建新的灰度(BuffereImage.TYPE_BYTE_GRAY)图像?,java,image,bufferedimage,Java,Image,Bufferedimage,我想创建灰度图像,但问题是如何为像素指定值(0-255)并在读取同一图像时读取它 BufferedImage img = new BufferedImage(width, height , BufferedImage.TYPE_BYTE_GRAY); File file = null; //create random image pixel by pixel for(int yHeight = 0; yHeigh
BufferedImage img = new BufferedImage(width, height , BufferedImage.TYPE_BYTE_GRAY);
File file = null;
//create random image pixel by pixel
for(int yHeight = 0; yHeight < height; yHeight++){
for(int xWidth = 0; xWidth < width; xWidth++){
img.setRGB(xWidth, yHeight, rgb);//here what values to specify
//for rgb (0-255)
}
}
//write image
try{
file = new File("D:\\Output.png");
ImageIO.write(img, "png", file);
}catch(IOException e){
System.out.println("Error: " + e);
}
BufferedImage img=新的BufferedImage(宽度、高度、BufferedImage.TYPE_BYTE_GRAY);
File=null;
//逐像素创建随机图像
对于(int-yHeight=0;yHeight
对于读取相同的图像,如何获得相同的指定像素值
private static void marchThroughImage(BufferedImage image) {
int w = image.getWidth();
int h = image.getHeight();
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
int pixel = image.getRGB(j, i);
}
}
}
private static void marchThroughImage(buffereImage图像){
int w=image.getWidth();
int h=image.getHeight();
对于(int i=0;i
您的问题有两个不同的部分:
- 首先,要用Java读/写一个图像,您应该使用Java.imageio,使用以下简单代码
buffereImage image=javax.imageio.imageio.read(新文件(“path/to/the/image”)代码>
boolean write=javax.imageio.imageio.write(图像,“png”,新文件(“where/to/write/the/image”)代码>
- 然后,要访问/修改图像中的像素,应该使用getSample/setSample访问光栅,或者如果需要性能,可以直接访问DataBuffer。阅读我对这个问题的回答:
- 首先,要用Java读/写一个图像,您应该使用Java.imageio,使用以下简单代码
buffereImage image=javax.imageio.imageio.read(新文件(“path/to/the/image”)代码>
boolean write=javax.imageio.imageio.write(图像,“png”,新文件(“where/to/write/the/image”)代码>
- 然后,要访问/修改图像中的像素,应该使用getSample/setSample访问光栅,或者如果需要性能,可以直接访问DataBuffer。阅读我对这个问题的回答:
- 您的问题有两个不同的部分:
BufferedImage img=new BufferedImage(宽度、高度、BufferedImage.BufferedImage.TYPE_国际ARGB);File=null;对于(int y=0;yimg.setRGB(x,y,pixel);
这里是如何计算像素值的谢谢我用下面的代码设置了像素值:buffereImage img=new buffereImage(宽度、高度、buffereImage.TYPE_BYTE_GRAY);BYTE[]buffer=((DataBufferByte)img.getRaster().getDataBuffer()).getData();对于(byte b:buffer){buffer[counter]=(byte)pixel;counter++}
但它会极大地增加图像大小。是否有其他方法可以逐像素创建灰度图像,并在不增加图像大小的情况下手动为每个像素设置像素值Type_INT_ARGB使用1 INT来编码图像,因此4乘以1字节(每个通道1字节).TYPE_BYTE_GRAY使用单个字节,因此只能从0到255进行编码。要填充TYPE_BYTE_GRAY,请使用DataBuffer或setSample,但不要使用setRGB(速度慢得多)。此外,TYPE_BYTE_GRAY比TYPE_INT_ARGB小得多。我没有读取图像。我正在创建新图像。我可以创建工作正常的新ARGB图像BufferedImage img=new BufferedImage(宽度、高度、BufferedImage.BufferedImage.TYPE_INT_ARGB);File File=null;for(INT y=0;yimg.setRGB(x,y,pixel);
这里是如何计算像素值的谢谢我用下面的代码设置了像素值:buffereImage img=new buffereImage(宽度、高度、buffereImage.TYPE_BYTE_GRAY);BYTE[]buffer=((DataBufferByte)img.getRaster().getDataBuffer()).getData();对于(byte b:buffer){buffer[counter]=(byte)pixel;counter++}
但它会极大地增加图像大小。是否有其他方法可以逐像素创建灰度图像,并在不增加图像大小的情况下手动为每个像素设置像素值Type_INT_ARGB使用1 INT来编码图像,因此4乘以1字节(每个通道1字节).TYPE_BYTE_GRAY使用单个字节,因此编码范围仅为0到255。要填充TYPE_BYTE_GRAY,请使用DataBuffer或setSample,但不要使用setRGB(速度慢得多)。此外,TYPE_BYTE_GRAY比TYPE_INT_ARGB小得多。