Java 有人能解释一下为什么这个代码没有把图像中的其他像素列都涂成红色吗?

Java 有人能解释一下为什么这个代码没有把图像中的其他像素列都涂成红色吗?,java,pixel,image-manipulation,Java,Pixel,Image Manipulation,这段代码是对我正在构建的更大程序的测试。它应该将图像中的每一个像素行涂成红色,但结果是添加到下面的图像。有人能解释一下为什么红色没有显示出来吗 package code; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public class Pixel { BufferedImage image; int width; int

这段代码是对我正在构建的更大程序的测试。它应该将图像中的每一个像素行涂成红色,但结果是添加到下面的图像。有人能解释一下为什么红色没有显示出来吗

package code;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import javax.imageio.ImageIO;

public class Pixel {

BufferedImage image;
int width;
int height;

public Pixel() throws IOException {
    File input = new File("/Users/SanchitBatra/Desktop/Depixelator.jpg");
    image = ImageIO.read(input);
    width = image.getWidth();
    height = image.getHeight();
}

public void changePixels() throws IOException{

        for(int i=0; i<height; i++){

            for(int j=0; j<width; j++){

                int red;
                //  Color c = new Color(image.getRGB(j, i));
                if(i%2==0){

                    red = 255;
                }
                else{
                    red=0;
                }
                int green = 0;
                int blue = 0;
                Color newColor = new Color(red, green, blue);

                image.setRGB(j,i,newColor.getRGB());

            }
        }

        File output = new File("/Users/SanchitBatra/Desktop/grayscale.jpg");
        ImageIO.write(image, "jpg", output);

    }


static public void main(String args[]) throws Exception {

    Pixel obj = new Pixel();
    obj.changePixels();
}
}
包码;
导入java.awt.*;
导入java.awt.image.buffereImage;
导入java.io.*;
导入javax.imageio.imageio;
公共类像素{
缓冲图像;
整数宽度;
内部高度;
公共像素()引发IOException{
文件输入=新文件(“/Users/SanchitBatra/Desktop/Depixelator.jpg”);
图像=图像IO.read(输入);
宽度=image.getWidth();
高度=image.getHeight();
}
public void changePixels()引发IOException{
对于(int i=0;i
  • 如果要使列变为红色,则应沿宽度而不是高度使列变为红色。当前代码将使备用行变为红色
  • 我认为你的代码还可以,试着放大/缩小你的图像,看看你是否得到了想要的效果
  • 谢谢, 哈桑

  • 如果要使列变为红色,则应沿宽度而不是高度使列变为红色。当前代码将使备用行变为红色
  • 我认为你的代码还可以,试着放大/缩小你的图像,看看你是否得到了想要的效果
  • 谢谢, 哈桑

    试试这个:

    public void changePixels() throws IOException{
    
        BufferedImage bi = new BufferedImage(side,side,BufferedImage.TYPE_INT_ARGB);
        int[] pixels = new int[width*height];
    
        for(int i=0; i<height; i++){
    
            for(int j=0; j<width; j++){
                int colorIn = image.getRGB(j,i);
                int redIn = 255&(colorIn<<16);
                int greenIn = 255&(colorIn<<8);
                int blueIn = 255&(colorIn);
    
                if(i%2==0){
    
                    redIn = 255;
                }
    
    
                pixels[i+j*width] = (255<<24)|(redIn<<16)|(greenIn<<8)|blueIn;
    
    
    
            }
        }
        bi.setRGB(0, 0, width, height, pixels, 0, width);
        File output = new File("/Users/SanchitBatra/Desktop/grayscale.jpg");
        ImageIO.write(bi, "jpg", output);
    
    }
    
    public void changePixels()引发IOException{
    BuffereImage bi=新的BuffereImage(边,边,BuffereImage.TYPE_INT_ARGB);
    int[]像素=新int[宽度*高度];
    对于(int i=0;i请尝试以下方法:

    public void changePixels() throws IOException{
    
        BufferedImage bi = new BufferedImage(side,side,BufferedImage.TYPE_INT_ARGB);
        int[] pixels = new int[width*height];
    
        for(int i=0; i<height; i++){
    
            for(int j=0; j<width; j++){
                int colorIn = image.getRGB(j,i);
                int redIn = 255&(colorIn<<16);
                int greenIn = 255&(colorIn<<8);
                int blueIn = 255&(colorIn);
    
                if(i%2==0){
    
                    redIn = 255;
                }
    
    
                pixels[i+j*width] = (255<<24)|(redIn<<16)|(greenIn<<8)|blueIn;
    
    
    
            }
        }
        bi.setRGB(0, 0, width, height, pixels, 0, width);
        File output = new File("/Users/SanchitBatra/Desktop/grayscale.jpg");
        ImageIO.write(bi, "jpg", output);
    
    }
    
    public void changePixels()引发IOException{
    BuffereImage bi=新的BuffereImage(边,边,BuffereImage.TYPE_INT_ARGB);
    int[]像素=新int[宽度*高度];
    
    对于(int i=0;i通过改变其他颜色值,你能让图像改变颜色吗?@Andy Turner当我将其设置为红色=255、绿色=0和蓝色=0时,我最终希望使用单个像素@EduardoDennis。它不应该是红色的吗?我开始认为这与你的文件名使其变为灰色有关lol@Sanchit然后learn如何计算rgb而不构造
    颜色
    ;这并不难:
    0xff通过改变其他颜色值,你能让图像改变颜色吗?@AndyTurner当我将其设置为红色=255、绿色=0和蓝色=0时,我最终想处理单个像素@EduardoDennis,它不应该是红色吗?我开始思考这与文件名的灰度化有关lol@Sanchit然后学习如何在不构建颜色的情况下计算rgb;这并不难:
    0xff是的,我也注意到了,但主要问题是缺少红色是的,我也注意到了,但主要问题是缺少红色,结果与以前相同,结果与以前相同呜咽