📄 pixelgrabber1.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 + -