2017-03-21 5 views
0

イメージアレイに複数のイメージを格納して表示している間に問題が発生しました。私が遭遇する問題は多少刺激的です。最後のイメージが表示されるでもindex.Iに言及した後、サイズを確認し、それがok.Heres私はHERESに世界クラスイメージアレイに複数のイメージを保存して表示できませんでした

import marvin.image.*; 
import marvin.io.*; 
import marvin.gui.*; 

import java.awt.FlowLayout; 
import java.awt.Image; 

import javax.swing.JFrame; 


public class apples { 
public static int WORLD_WIDTH = 500; 
public static int WORLD_HEIGHT = 300; 
public static void main(String[] args){ 
    JFrame worldFrame = new JFrame("world"); 
    worldFrame.getContentPane(); 
    worldFrame.add(new world(WORLD_WIDTH, WORLD_HEIGHT)); 
    worldFrame.setVisible(true); 
    worldFrame.setSize(WORLD_WIDTH , WORLD_HEIGHT+30); 
    worldFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

    segmentObjects segment = new segmentObjects(); 

} 
} 

しようとしているサンプルコードでしています

import java.awt.Color; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.image.BufferedImage; 
import javax.swing.JPanel; 

public class world extends JPanel{ 

static int SPACEX; 
static int SPACEY ; 
public static Image world; 
static int movex = 100; 
static int movey = 240; 

public world(int WORLD_WIDTH, int WORLD_HEIGHT) { 
    SPACEX = WORLD_WIDTH; 
    SPACEY = WORLD_HEIGHT; 
} 

public void paint(Graphics g) { 

    BufferedImage worldB = new  BufferedImage(SPACEX,SPACEY,BufferedImage.TYPE_BYTE_BINARY); 
    Graphics worldG = worldB.getGraphics(); 
    worldG.setColor(Color.WHITE); 
    worldG.fillRect(0, 0,SPACEX, SPACEY); // draw the space 

    worldG.setColor(Color.BLACK); 

    //worldG.fillRect(movex, movey,50, 50); //draw the agent 
    worldG.fillOval(300, 100, 50, 50); 
    //worldG.fillOval(395, 100, 50, 50); 
    for(int x =220;x<300;x++){ 
    worldG.drawLine(200, 200, x, 250);} 


    world = worldB; 
    g.drawImage(world, 0, 0, this); 
} 
} 

HERESにセグメントクラス:

import static marvin.MarvinPluginCollection.floodfillSegmentation; 

import java.awt.Color; 
import java.awt.image.BufferedImage; 
import java.util.ArrayList; 
import java.util.LinkedList; 

import javax.swing.JFrame; 
import static marvin.MarvinPluginCollection.*; 
import marvin.gui.MarvinImagePanel; 
import marvin.image.MarvinBlob; 
import marvin.image.MarvinBlobSegment; 
import marvin.image.MarvinContour; 
import marvin.image.MarvinImage; 
import marvin.image.MarvinSegment; 
import marvin.io.MarvinImageIO; 
import marvin.math.Point; 

public class segmentObjects extends JFrame{ 
static MarvinImage original = new MarvinImage((BufferedImage) world.world); 
static public int x1; 
static public int y1; 
static public int width; 
static public int height; 
static MarvinImage memory = new MarvinImage(); 
static ArrayList<Point> countorPoints = new ArrayList<Point>(); 
static int counter; 
static MarvinImage[] ImgSeg=new MarvinImage[10]; 


public segmentObjects(){ 
super("segments"); 
MarvinImage image = original.clone(); 

MarvinSegment[] segments = floodfillSegmentation(image); 

for(int i=1; i<segments.length; i++){ 

    MarvinSegment seg = segments[i]; 
    x1 =seg.x1; 
    y1 = seg.y1; 
    width = seg.width; 
    height =seg.height; 
    crop(original,memory,x1,y1,width,height); 

    ImgSeg[i-1]=memory; 
    //System.out.println(width+" "+height); 


    //System.out.println(ImgSeg.size()); 
    counter =segments.length-1; 
    //contour(i); 

} 

System.out.println(ImgSeg[1].getWidth()); 
MarvinImagePanel imagePanel = new MarvinImagePanel(); 
imagePanel.setImage(ImgSeg[0]); 
add(imagePanel); 
setSize(400,630); 
setVisible(true); 
} 
} 

申し訳ありませんが、私は私のメインのプロジェクトから

+0

あなたは最小限の作業例を投稿することができ、この行を削除しますか? – ahoxha

+0

私はどのような例urのrefer.itsは理解していないちょうどそれshould should.thats問題を解決する –

+0

私はちょうどイメージ内の異なるオブジェクトをセグメント化し、これらのオブジェクトをセグメント化するために、オブジェクトのint配列をイメージし、後で使用されるwill.butで表示されます。ただし、index.itを使用してイメージを表示しようとすると、最後のイメージが表示されます。問題はわかりません。本当に感知できる。 –

答えて

1

をペーストをカットするためにここにあなたの問題ですしていたので、不足しているカール括弧などのいずれかのマイナーなエラーがある場合:

crop(original,memory,x1,y1,width,height); 
ImgSeg[i-1]=memory; 

にトリミングされた画像を保存しているcrop方法memory変数。次にそれをImgSeg配列の(i-1)th要素に割り当てます。次の反復では、memoryの内容を変更していますが、ImgSeg配列の前の要素がこのオブジェクトを指しています。つまり、今すぐ保存した新しい内容がmemoryになります。したがって、最後(最後の反復)では、memoryは最後のイメージの内容を持ち、ImgSegのすべての要素は同じmemoryオブジェクトを指しています。

これを解決するには、ループ内に新しいMarvingImageを作成し、このオブジェクトに切り取った画像を保存してから、配列の(i-1)th要素に割り当てます。

for(int i=1; i<segments.length; i++){ 
    MarvinImage memory = new MarviImage(); 
    MarvinSegment seg = segments[i]; 
    x1 =seg.x1; 
    y1 = seg.y1; 
    width = seg.width; 
    height =seg.height; 
    crop(original,memory,x1,y1,width,height); 

    ImgSeg[i-1]=memory; 
    //System.out.println(width+" "+height); 

    //System.out.println(ImgSeg.size()); 
    counter =segments.length-1; 
    //contour(i); 
} 

static MarvinImage memory = new MarvinImage();

+0

ありがとうたくさんの男..........百万倍の私のお尻 –

+0

@NizamAhmed、アンドリュートンプソンとして指摘してください[回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)ので、人々は答えられたことを知ることができます。このやり方で、あなたと私は共に評判を得ています。ありがとう! – ahoxha

関連する問題