2

javafx.scene.image.Image があり、サブ四角形で新しいイメージを作成する必要があります。PixelReader.getPixels を試しましたが、WritablePixelFormat が要求され、使用方法がわかりません。

4

1 に答える 1

0

私がお勧めするのは、サブ長方形のサイズだけCanvasをインスタンス化し、そのGraphicsContextを使用して、そこにソース画像の一部を描画することです。その後、ImageView を使用した場合と同じように Canvas を使用します。

私は、画像をスライスにカットしてそれらを提供するクラスでこれを行っています。

基本的に手順は次のとおりです。

  1. サブ長方形のサイズの Canvas ノードを作成します
  2. その Canvas の GraphicsContext を取得する
  3. 画像をソースとして使用して、そのキャンバスに描画します
  4. キャンバスをシーンに挿入するか、適切な場所に挿入します

これは、描画を行う GraphicsContext です。

public void drawImage(Image img,
             double srcX,
             double srcY,
             double srcWidth,
             double srcHeight,
             double destX,
             double destY,
             double destWidth,
             double destHeight)

Scalaで画像の「スライス」を描画するためのコードは次のとおりです。

import javafx.scene.image.Image
import javafx.scene.canvas.Canvas

class Slicer(val img: Image, val xAmount: Int, val yAmount: Int) {

  val sliceWidth = img.getWidth() / xAmount
  val sliceHeight = img.getHeight() / yAmount

  def sliceAt(x: Int, y: Int): Canvas = {
    val canvas = new Canvas(sliceWidth, sliceHeight)
    val grContext = canvas.getGraphicsContext2D()

    val (sourceX, sourceY) = coordinatesOfSliceAt(x, y)
    val (destX, destY) = (0, 0)

    grContext.drawImage(img,
      sourceX, sourceY, sliceWidth, sliceHeight,
      destX, destY, sliceWidth, sliceHeight)

    canvas
  }

  def coordinatesOfSliceAt(x: Int, y: Int): (Int, Int) = {
    val coordX = ((x - 1) * sliceWidth).toInt
    val coordY = ((y - 1) * sliceHeight).toInt
    (coordX, coordY)
  }

}

これに出くわしたとき、私はこの解決策にたどり着きました:

http://docs.oracle.com/javafx/2/image_ops/jfxpub-image_ops.htm

関連する部分は、元の画像の一部を Canvas に描画することでした。そのため、PixelReaders や Writer を扱う必要はありません。

于 2013-06-09T18:36:56.487 に答える