2016-12-04 8 views
0

私のユニにプロジェクトを作っていて、問題がある - すべてうまくいくが、2ピクセルの色を比較するとバグがある。 私はいくつかの数字の面積を数えなければならず、私はMonteCarloメソッドを使用しなければなりません。 、いくつかのdontを(calculete図エリア図中のポイントをカウントして、ランダムな点を生成する) そして、いくつかの点がうまくカウントされ、私は...、Imはその数時間を解決しようとしていただきました!間違った見当がつかない2つのピクセルを比較する(カラー)

import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Random; 
import javax.imageio.ImageIO; 
import javax.swing.*; 

public class Runner extends JApplet{ 

private BufferedImage img; 
public ArrayList<Point> w; 
public ArrayList<Point> poza; 
public BufferedImage output; 

public void init(){ 

    try{ 
     img = ImageIO.read(new File("figura.gif")); 
    } catch (IOException e){ 
     e.getStackTrace(); 
     System.err.println("Nie ma obrazkaXD"); 
    } 

} 

public void paint(Graphics g){ 
    w = new ArrayList<Point>(); 
    poza = new ArrayList<>(); 
    super.paint(g); 
    Random random = new Random(); 
    int wys = img.getHeight(); 
    int szer = img.getWidth(); 
    g.drawImage(img, 0, 0, wys, szer, null); 
    for (int i = 0; i < 1000; i++) { 
     int x = random.nextInt(wys); 
     int y = random.nextInt(szer); 
     Point p = new Point(x,y); 
     g.setColor(Color.GREEN); 
     g.drawOval(y, x, 1, 1); 
     Color c = new Color(img.getRGB(y, x));; 
      if(c.equals(Color.BLACK)){ 
       w.add(p); 
       g.setColor(Color.RED); 
       g.drawOval(y, x, 1, 1); 
      }else{ 
       poza.add(p); 
      } 
    } 

float a = w.size(); 
float b = poza.size()+w.size(); 
float poleProstokata = wys*szer; 
float pole = a/b*poleProstokata; 
} 

答えて

0
あなたが

を使用する必要がありますので、

https://docs.oracle.com/javase/7/docs/api/java/awt/image/BufferedImage.html#getRGB(int,%20int)

は方法のgetRGBは、最初のXとYの二を取ります

私は、Oracleのマニュアルに記載されているため、yを切り替えるようにしてY座標を示唆しています

Color c = new Color(img.getRGB(x, y)); 

代わりの

Color c = new Color(img.getRGB(y, x));; 

、なぜint型を使用していけませんか?つまり、返されたintを常にgetRGBから色に変換して比較します。しかし、Color Blackからintを作成し、それをgetRGB(x、y)から返されたintと比較するのはなぜですか?あなたのpaintメソッド

の初めに、あなたのループで

int black=Color.BLACK.getRGB(); 

:相続人

は、私が提案する何

int c=img.getRGB(y, x); 

をし、それらを比較:

if (black==c) { 
    //Do your stuff... 
}