⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pixelgrabber1.java

📁 用java 编写的从jpg文件中提取图像像素的程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class pixelgrabber1 extends Frame
{
  int x, w, h;
  int[] pixels;
  int[][] p;
  int[] red0;//=new int[w*h];
  int[] green0;//=new int[w*h];
  int[] blue0;//=new int[w*h];
  int[][] red;
  int[][] green;
  int[][] blue;
  Image im, cropped;
  Graphics g = getGraphics();
   int nWidth = getWidth();
   int nHeight = getHeight();

  public pixelgrabber1()
  {
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    MediaTracker tracker = new MediaTracker(this);
    im = Toolkit.getDefaultToolkit().getImage("flower.jpg");
    tracker.addImage(im, 0);
    try {
      tracker.waitForID(0);
    }
    catch (InterruptedException e) {
      e.printStackTrace();
    }
    w = im.getWidth(this);
    h = im.getHeight(this);
    pixels = new int[w * h];
    p = new int[w][h];
    red0=new int[w*h];
    green0=new int[w*h];
    blue0=new int[w*h];
     red=new int[w][h];
     green=new int[w][h];
     blue=new int[w][h];
    try {
      PixelGrabber pg = new PixelGrabber(im, 0, 0, w, h, pixels, 0, w);
      pg.grabPixels();
    }
    catch (InterruptedException e) {
      e.printStackTrace();
    }
    ColorModel cm = ColorModel.getRGBdefault();
    for (x = 0; x < w * h; x++) {
      int alpha = 250;
       red0[x] = cm.getRed(pixels[x]);
       green0[x] = cm.getGreen(pixels[x]);
       blue0[x] = cm.getBlue(pixels[x]);
     // pixels[x] = alpha << 24 | red << 16 | green << 8 | blue;

    }
    for (int i = 0; i < w ; i++)
      for (int j = 0; j < h; j++) {
        p[i][j] = pixels[i * w + j];
        red[i][j]=red0[i*w+j];
        green[i][j]=green0[i*w+j];
        blue[i][j]=blue0[i*w+j];
      }
//for(int i=0;i<w;i++)
    // for(int j=0;j<h;j++)

    // ImageProducer ip = new MemoryImageSource(w, h, pixels, 0, w);
    // cropped = createImage(ip);*/
  }



  void scan(Graphics g, int x0, int y0, int x1, int y1, int x2, int y2)
  {
    int[][] p1 = new int[100][100];
    int j, i, l;
    float k1, k2, k3, k4;
    int t;
    float m=0.1f;
    float m1, m2, delty2, a0, b0, a1, b1, deltx3, delty3, a3, b3, a4, b4;
   int dx1, dy1, steps1, k, dx2, dy2, steps2, dx3, dy3, steps3;
   if (y0 == y1)
     {
       g.setColor(Color.red);
   g.drawLine(x0,y0,x1,y1);
    g.drawLine(x1,y1,x2,y2);
    g.drawLine(x2,y2,x0,y0);

       if (x0 > x1)
       {
         m1 = ( (float) (x2 - x1)) / (y2 - y1);
         m2 = ( (float) (x2 - x0)) / (y2 - y0);
         a0 = x1;
         b0 = y1+1;
         a1 = x0;
         b1 = y0;
         for (k = y0; k <= y2; k++)
         {
           a0 += m1;
           // b0++;
           a1 += m2;
           for (i = 0; i <= a1- a0; i++)
           {
             g.setColor(Color.BLUE);
             g.drawLine( (int) (a0+ i), (int) b0, (int) (a0 + i), (int) b0);

           }
           b0++;

         }
       }
       else
       {
         a1 = x1;
         b1 = y1;
         a0 = x0;
         b0 = y0;
         m1 = ( (float) (x2 - x0)) / (y2 - y0);
         m2 = ( (float) (x2 - x1)) / (y2 - y1);
         for (k = y0; k <= y2; k++)
         {
           a0 += m1;
           // b0++;
           a1 += m2;

           for (i = 0; i <= a1 - a0; i++)
           {
             //g.setColor(new Color(red[(int) (a0 + i)],green[(int) (a0 + i)],blue[(int) (a0 + i)]));
             g.drawLine( (int) (a0 + i), (int) b0, (int) (a0 + i), (int) b0);

           }
           b0++;
         }
       }
     }

else
     {
       if (y1 < y0) {
         t = y0;
         y0 = y1;
         y1 = t;
         t = x0;
         x0 = x1;
         x1 = t;
       }

       if (y2 < y1) {
         t = y1;
         y1 = y2;
         y2 = t;
         t = x1;
         x1 = x2;
         x2 = t;
       }
       if (y1 < y0) {
         t = y0;
         y0 = y1;
         y1 = t;
         t = x0;
         x0 = x1;
         x1 = t;
       }
       g.setColor(Color.black);
       g.fillRect(Math.min(Math.min(x0,x1),Math.min(x1,x2)),y0,Math.abs(Math.max(Math.max(x2,x0),Math.max(x1,x0))-Math.min(Math.min(x0,x1),Math.min(x1,x2))),y2-y0);
       m1 = ( (float) (x1 - x0)) / (y1 - y0);
       m2 = ( (float) (x2 - x0)) / (y2 - y0);
       a0 = x0;
       a1 = x0;
       b1 = b0 = y0;
       for (k = y0; k <= y1; k++) {
         //g.drawLine((int)a0,(int)b0,(int)a1,(int)b1);
         a0 += m1;
         // b0++;
         a1 += m2;
         for (i = 0; i <=Math.abs(a1 - a0); i++) {
           Color c=new Color(red[(int)(Math.min(a0,a1) + i)][(int)b0], green[(int)(Math.min(a0,a1) + i)][(int)b0],blue[(int)(Math.min(a0,a1) + i)][(int)b0]);
          //Color c=new Color(0,0,255);
           g.setColor(c);
           //g.setColor(new Color(red[(int)(a0 + i)][(int)b0], green[(int)(a0 + i)][(int)b0],
            //                    blue[(int)(a0 + i)][(int)b0]));
           g.drawLine( (int) (Math.min(a0,a1) + i), (int) b0, (int) (Math.min(a0,a1) + i), (int) b0);

         }
         b0++;
         //b1++;
       }
       //if (a0 > a1)
         m1 = ( (float) (x2 - x1)) / (y2 - y1);
       //else {
         //m1=((float)(x1-x0))/(y1-y0);
         for (k = y1 + 1; k <= y2; k++) {
           /*g.drawLine((int)a0,(int)b0,(int)a1,(int)b1);
                 a0+=m1;
                 b0++;
                 a1+=m2;
                 b1++;*/
           a0 += m1;
           // b0++;
           a1 += m2;
           for (i = 0; i <= Math.abs(a1 - a0); i++) {
              //g.setColor(Color.BLUE);
             //Color c=new Color(0,0,255);
           //g.setColor(c);
             g.setColor(new Color(red[(int)(Math.min(a0,a1) + i)][(int)b0], green[(int)(Math.min(a0,a1) + i)][(int)b0],blue[(int)(Math.min(a0,a1)+i)][(int)b0]));
             g.drawLine( (int) (Math.min(a0,a1) + i), (int)b0, (int) (Math.min(a0,a1) + i), (int) b0);

           }
           b0++;

         }

       }
    // }
 }


   // g.drawLine(x0,y0,xo+deltax,y0+deltay);


   /* if (x1 > x2) {
      k1 =m* (x2 - x0) / (y2 - y0);
      k2 = m*(x1 - x0) / (y1 - y0);
      k3 = k1;
      k4 = m*(x2 - x1) / (y2 - y1);
    }
    else {
      k1 = m*(x1 - x0) / (y1 - y0);
      k2 = m*(x2 - x0) / (y2 - y0);
      k3 = m*(x2 - x1) / (y2 - y1);
      k4 = k2;
    }
    for (j = 0; j <= y1-y0; j++)
      {for (i = 0; i <= y1; i++)
          g.drawLine((int)(x0+k1*j+i),y0+j,(int)(x0+k2*j+i),y0+j);
          /*{for (l = (int)(x0+k1*j); l <= (int)(x0+k2*j) ; l++) {
              // p1[x0 + i * (int) k1 + l][y0 + j] = p[ 100 ][100];
              g.setColor(Color.blue);
              g.drawLine(l, y0 + j, l+1,
                         y0 + j);
            }
          }
      }
    for (i = 0; i < 0*(x1 - x0 * y1 * (int) k1); i++) {
      //p1[x0 + (y1 - y0) * (int) k1 + i][y1] = p[x0 + (y1 - y0) * (int) k1 +
        //  i][y1];
      g.setColor(Color.green);
      g.drawLine(x0 + (y1 - y0) * (int) k1 + i, y1,
                 x0 + (y1 - y0) * (int) k1 + i, y1);
    }//g.drawLine(100, 0, 300, 300);
    for (j = 0; j <= y2-y1; j++)
      {for (i = 0; i <= y2 - y1; i++)
        {
          for (l = 0; l <= (int) ( (y1 - y0) * (k2 - k1) + i * (k4 - k3)); l++) {
            // p1[x0+(y1-y0)*(int)k1+l][y0+j]=p[x0+(y1-y0)*(int)k1+l][y0+j];
            g.setColor(Color.BLACK);
            g.drawLine( (int) (x0 + (y1 - y0) * k1 + l), y1 + j,
                       (int) (x0 + (y1 - y0) * k1 + l), y1 + j);

          }
        }
      }
  }*/

  public  void paint(Graphics g)
  {
    int[] x = new int[3];
    int[] y = new int[3];
    x[2] = 0;
    y[2] = 0;
    x[0] = 100;
    y[0] = 100;
    x[1] = 200;
    y[1] = 50;
    g.setColor(Color.red);

        //g.drawImage(im,-10,-10,this);
        //g.drawImage(cropped,w+150,150,this);
    //g.drawLine(100, 0, 300, 300);
    scan(g, 200,100,100, 50, 200, 300);
  }

  public static void main(String[]  args)
  {


    //Graphics g=getGraphics();

     pixelgrabber1 f=new pixelgrabber1();
    f.setSize(530,520);
    f.show();
   // f.paint(g);

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -