2013-02-10 9 views
5

私はJavaFXを使ってジグソーパズルを書くことを試みています。しかし、画像の実際の切り抜きには問題があります。JavaFXでの効果的なイメージクロッピング

アイデアは、ユーザーが画像と画像をより小さな部分にカットするプログラムを提供することです。シンプル、そう?私の問題はこれです:私はイメージをカットする見つけることができる唯一の方法は、画像オブジェクトのコピーを作成し、そのコピーの目に見える部分を変更することで、ここでの例です:

ImageView imgageView = new ImageView(); // Creates a new ImageView; this will be a single puzzle piece. 
imgageView.setImage(originalImage); // Use the original image as the "base." 
Rectangle2D rectangle = new Rectangle2D(0, 0, 50, 50); // Crop the image from (0,0) to (50, 50). 

ただ、最後の行を明確にします、ここでrelated piece in the APIだ:私は(ゲームは幼児のためのものです)4または9個に絵を切断していた場合、私は素敵に絵を切るために何をしたい場合は

public Rectangle2D(double minX, 
      double minY, 
      double width, 
      double height) 
Creates a new instance of Rectangle2D. 
Parameters: 
minX - The x coordinate of the upper-left corner of the Rectangle2D 
minY - The y coordinate of the upper-left corner of the Rectangle2D 
width - The width of the Rectangle2D 
height - The height of the Rectangle2D 

さて、これは結構です1200ピースのパズル?これは非常に高価な操作ではありませんか?画像を切り取るだけでなく、その画像の多くのコピーをメモリに保存すること。これを正しく理解していれば、各部分は元の画像全体で構成され、その大部分は「隠された」状態になります。

私は単に機能を誤解していますか?そうでない場合は、これを行うためのより良い方法が必要です。

答えて

11

PixelReaderとWritableImageを使用すると役立ちます。次

position (x,y)で古いものから新しいイメージをカットし size (width, height)

PixelReader reader = oldImage.getPixelReader(); 
WritableImage newImage = new WritableImage(reader, x, y, width, height); 
+0

答えをいただきありがとうございます。私は実際にこの質問についてすべて忘れました。 – NotMyName

9

複数のImageViewのオブジェクトが同じ画像を参照することができます。画像自体のデータは画像に保存されます。同じImageを参照する1000個のImageViewオブジェクトがある場合、メモリ内にはピクセルのコピーが1つしかありません。 WriteableImageを使用してコピーを作成すると、実際には複数のImageViewオブジェクトを持つよりも高価になります。

関連する問題