2016-11-14 19 views
2

JavaFX Canvasの画像を水平方向または垂直方向に反転する問題があります。理論的にはJavaFXイメージを水平または垂直方向に反転

スケール:ここ

flip here (scale(-1,1)) | here it was 
        _ _ _ _ _|_ _ _ _ _ 
          |                 
flip here (scale(-1,-1)) | fliped here(scale(1,-1)) 

は、いくつかの私は、画像を水平方向に反転する方法gc.scale(-1,0)を使用していますsecond.Soあたり約30回呼び出されるメソッドの行が、lags.Howが私できることはすべてしていますそれを行う? Swingで例えば

public void drawMethod{ 

    //.... 

    gc.drawImage(lightBlueLight, 0, 0); // where lightBlueLight is an `Image` 


//... 
} 

iは、可能であれば(> Reflecting text in java

しかし、JavaFXの中で、私はこれを行う方法が何であるかを知らないので、変換に新しいですが、テキストベース反映するために、この方法を使用していましたi)は、CPU使用率のそれは用語の最良の方法を知りたい:


サンプル画像(私が持っているもの):

enter image description here

私はキャンバス上に描画したい:出力幅/高さの値は画像を反転するよう負の値を入力することにより

public void draw(GraphicsContext g){ 
    //(javafx.scene.image.Image, 
    // sourceX,sourceY, sourceWidth,sourceHeight, 
    //outputX,outputY,outputWidth,outputHeight);   
    g.drawImage(RESOURCE, 0, 0, RESOURCE.getWidth(), RESOURCE.getHeight(), RESOURCE.getWidth(),0,-RESOURCE.getWidth(),RESOURCE.getHeight()); 
} 

:これを試してみてください

enter image description here

答えて

1

、あなたはまた、それ以外の場合は、ちょうどキャンバスの左端を中心に反転し、何も表示されません変換を必要としています。

fipped

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.canvas.Canvas; 
import javafx.scene.canvas.GraphicsContext; 
import javafx.scene.image.Image; 
import javafx.stage.Stage; 

public class Flipper extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage stage) throws Exception { 
     Canvas canvas = new Canvas(300, 300); 
     Image image = new Image("https://i.stack.imgur.com/ySbuj.png"); 
     double xoff = 15; 
     GraphicsContext gc = canvas.getGraphicsContext2D(); 
     gc.save(); 
     gc.translate(image.getWidth() + xoff * 2, 0); 
     gc.scale(-1, 1); 
     gc.drawImage(image, xoff, 0); 
     gc.restore(); 
     gc.drawImage(image, xoff, 0); 
     stage.setScene(new Scene(new Group(canvas))); 
     stage.show(); 
    } 
} 
+0

こんにちはJewelsea私はそれが60 fpsに合っていると仮定します... 'gc.save();のコンセプトは遅いと思います。 – GOXR3PLUS

+0

['gc.save()'](https://docs.oracle.com/javase/8/javafx/api/javafx/scene/canvas/GraphicsContext.html#save--)は、いくつかの属性をスタックに張り付けるだけです。これは非常に迅速に実行され、アニメーションfpsに大きな影響を与えない操作です。 – jewelsea

+0

ありがとう、あなたjewelsea。私は2番目の答えを選んだ理由は非常に単純で1行です:) – GOXR3PLUS

関連する問題