|
分類:[Java]
javaで立体視のソフトを作成中。文法的なエラーは無いのですが、全然表示しない。デバッグをしたが、何故か、途中でEventDispachThreadへ、飛んでいってしまう。 もう、手に負えない状況です。どなたか、助けてください。マウスクリックすると、色の情報は表示されますが、目的の立体視は、完成の目処が立っていません。 下記に、ソフトを記します。
import java.applet.*; import java.awt.*; import java.awt.image.*; public class pyramid2j extends Applet { int cn; int pc; Image image; Graphics graphics; Image image2; Graphics g2;
int XMAX = 399; int YMAX = 399; int HABA=60; int MITUDO = 25; int RITTAIDO = 2; int TAKASA[]=new int[XMAX]; String DOT[]=new String[XMAX];
int X; int Y; int cns[]=new int[400*400];
public void paint(Graphics g) { if (image == null) image = createImage(400,400); if (graphics == null) graphics = image.getGraphics();
Color mycolor[]={Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray, Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red, Color.white,Color.yellow}; paintsikaku(); g.drawImage(image,0,0,this);
g.drawString("pc="+pc,150,200); g.drawString("cn="+cn,150,210);
int pixels[] = new int[400 * 400]; PixelGrabber pg = new PixelGrabber( image,0,0,400,400, pixels, 0,400) ; try { pg.grabPixels() ; } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); } int cns[]=new int[400*400];
for (int index=0;index<400*400+1;index++){ pc=pixels[index]; cn= mycolornumber(pc); cns[index]=cn; }
if (image2 == null) image2 = createImage(400,400); if (g2 == null) g2 = image2.getGraphics();
for (Y = 0;Y<YMAX+1;YMAX++){ for (int i=0;i<XMAX+1;XMAX++){ DOT[i] = "";} TAKASALOAD(Y); for ( X = 0;X< XMAX+1;XMAX++){ int TAKASA1 = TAKASA[X] * RITTAIDO; if( DOT[X] =="" ){ if ((int)(Math.random()* 100) < MITUDO){ DOT[X] ="11";} else { DOT[X] =" 0";}
int numver=Integer.parseInt(DOT[X]);
g2.setColor(mycolor[numver]); g2.fillRect(X,Y,1,1); int TUGI = X + HABA - (TAKASA1 * RITTAIDO); if( TUGI >= 0 & TUGI <= XMAX){ DOT[TUGI] = DOT[X];} } } g.drawImage(image2,0,0,this);} }
public void paintsikaku() { if (image == null) image = createImage(400,400); if (graphics == null) graphics = image.getGraphics();
Color mycolor[]={Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray, Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red, Color.white,Color.yellow}; int j=1; for (int i=1;i<8;i++){ graphics.setColor(mycolor[i]); graphics.fillRect(0+(i-j)*25,0+(i-j)*25,400-(i-j)*50,400-(i-j)*50);} } public int mycolornumber(int iro){ if (iro==-16777216) cn=0; else if (iro==-16776961) cn=1; else if (iro==-16711681) cn=2; else if (iro==-12566464) cn=3; else if (iro==-8355712) cn=4; else if (iro==-16711936) cn=5; else if (iro==-4144960) cn=6; else if (iro==-65281) cn=7; else if (iro==-14336) cn=8; else if (iro==-20561) cn=9; else if (iro==-65536) cn=10; else if (iro==-1) cn=11; else if (iro==-256) cn=12; return cn;}
public void TAKASALOAD(int Y){ for (X=0;X<XMAX+1;X++){ int index=(Y-1)*400+X+1; TAKASA[X]=cns[index];} } public boolean mouseDown(java.awt.Event evt,int x,int y) { int pixels[] = new int[400 * 400]; PixelGrabber pg = new PixelGrabber( image,0,0,400,400, pixels, 0,400) ; try { pg.grabPixels() ; } catch (InterruptedException e) { // TODO 自動生成された catch ブロック e.printStackTrace(); }
int index=(y-1)*400+x+1; pc=pixels[index]; cn=mycolornumber(pc); repaint(); return true; }
}
|