Java 跳过像素问题

Java 跳过像素问题,java,Java,我正在写一个程序,将采取二维码图像和识别黑/白像素,并保持在一个数组中。但我的问题是;我有294x294像素的图像和一个固定大小21x21的矩阵。对我来说,一个正方形模块是294/21=4.0像素。如何按4.0像素到4.0像素搜索像素?这是我的密码: public static void printAllARGBDetails(BufferedImage image) { int width = image.getWidth(); int height = ima

我正在写一个程序,将采取二维码图像和识别黑/白像素,并保持在一个数组中。但我的问题是;我有294x294像素的图像和一个固定大小21x21的矩阵。对我来说,一个正方形模块是294/21=4.0像素。如何按4.0像素到4.0像素搜索像素?这是我的密码:

public static void printAllARGBDetails(BufferedImage image) {
        int width = image.getWidth();
        int height = image.getHeight();
        System.out.println("Image Dimension: Height-" + height + ", Width-"
                + width);
        System.out.println("Total Pixels: " + (height * width));
        int pixels[][]=new int[21][21];
        int pixel=width/21;
        System.out.println("Pixel=" +pixel);

        for (int i = 20; i>=0 ; i--) {
            for (int j = 20; j>=0 ; j--) {
                if(image.getRGB(i, j)==-1)
                {

                    pixels[i][j]=0;
                }
                else
                {
                    pixels[i][j]=1;
                }

            }
        } 
  }

`下面编辑的代码应该可以工作,但它只测试每个元素中16个像素中的1个

    for (int i = 0; i<20 ; i++) {
        for (int j = 0; j<20 ; j++) {
            if(image.getRGB(i*4, j*4)==-1)
            {

                pixels[i][j]=0;
            }
            else
            {
                pixels[i][j]=1;
            }

        }
    } 

对于(int i=0;i您可能应该引入一种方法,以某种方式将4x4像素阵列计算为
0
1
,例如,基于平均亮度:

public static void printAllARGBDetails(BufferedImage image) {
    int width = image.getWidth();
    int height = image.getHeight();
    System.out.println("Image Dimension: Height-" + height + ", Width-"
            + width);
    System.out.println("Total Pixels: " + (height * width));
    int pixels[][]=new int[21][21];
    int pixel=width/21;
    System.out.println("Pixel=" +pixel);

    for (int i = 20; i>=0 ; i--) {
        for (int j = 20; j>=0 ; j--) {
                pixels[i][j] = getPixel (image, i, j);
                System.out.println(String.format ("Pixel[%d,%d]=%d", i, j, pixels[i][j]));
        }
    } 
}

private static final long LUMINOSITY_THRESHOLD = 23000;

private static int getPixel (BufferedImage image, int i, int j) {
   long totalLuminosity = 0;
   for (int k = 0; k < 4; k++) {
      for (int m = 0; m < 4; m++) {
          long luminosity = getLuminosity (image.getRGB (i*4 + k, j*4 + m));
          totalLuminosity += luminosity;
      }
   }

   return totalLuminosity/16 > LUMINOSITY_THRESHOLD ? 0 : 1;
}

private static int getLuminosity (int rgb) {
    int r = rgb >> 16;
    int g = (rgb >> 8) & 0xFF;
    int b = rgb & 0xFF;

    int luminosity = 21*r + 71*g + 7*b;

    return luminosity;
}    
publicstaticvoidprintallargbdetails(buffereImage图像){
int width=image.getWidth();
int height=image.getHeight();
System.out.println(“图像尺寸:高度-”+高度+”,宽度-”
+宽度);
System.out.println(“总像素:”+(高度*宽度));
整数像素[][]=新整数[21][21];
int像素=宽度/21;
System.out.println(“像素=”+像素);
对于(int i=20;i>=0;i--){
对于(int j=20;j>=0;j--){
像素[i][j]=getPixel(图像,i,j);
System.out.println(String.format(“像素[%d,%d]=%d”,i,j,像素[i][j]);
}
} 
}
专用静态最终长亮度_阈值=23000;
私有静态int getPixel(BuffereImage图像、int i、int j){
长总照度=0;
对于(int k=0;k<4;k++){
对于(int m=0;m<4;m++){
长亮度=getluminity(image.getRGB(i*4+k,j*4+m));
总光度+=光度;
}
}
返回总亮度/16>亮度阈值?0:1;
}
专用静态int getLuminosity(int rgb){
int r=rgb>>16;
int g=(rgb>>8)&0xFF;
intb=rgb&0xFF;
内部亮度=21*r+71*g+7*b;
返回亮度;
}    

>我假设你只是为了证明概念或赋值而做这件事?如果不是,在现实生活中有很多要考虑的问题。而且已经有许多图书馆已经解决了这些问题。是的,这是我的项目任务。没有亮度。我只想用宽度为21的模块大小来获得颜色模块的大小。。我尝试了你的代码,它给出了与我完全相同的结果。@Berkan我理解你的问题的方式是,你有一个QR21代码存储在一个294x294图像中。因此,基本上你必须将全比例图像转换为21x21黑白图像。这正是我建议的代码所做的。它还增加了我的数组索引数。