2016-12-13 8 views
1

面白いチャレンジ:
大きな単語のフォームを表示するアプリを作成しようとすると、ユーザーが入力した一連のテキストが繰り返し表示されます。私は今キャンバスJavafxを使用したビッグワードアプリ、面白いチャレンジ

public void writeOut(String bigWord, String littlewords){ 

    HBox word = new HBox(); 
    word.setPadding(new Insets(10,10,10,10)); 

    String[] letters = bigWord.split("\\B"); 
    littleWordArray = littlewords.split(" "); 
    inputText = littlewords; 


private String getRandomSmallWord(){ 
    int size = littleWordArray.length; 
    return littleWordArray[rand.nextInt(size)]; 
} 

問題です:

//create pixel readers and writer to write to canvas 
    PixelReader pixreader = imga.getPixelReader(); 
    PixelWriter pixwriter = gc.getPixelWriter(); 

    //point arrays 
    ArrayList<Integer> xpoints = new ArrayList<>(); 
    ArrayList<Integer> ypoints = new ArrayList<>(); 

    //Read shape of letter by the color of its pixels against a white background 
    for(int readY=0;readY<imga.getHeight();readY++){ 
     for(int readX=0;readX<imga.getWidth();readX++){ 

      Color color = pixreader.getColor(readX, readY); 
      if(!color.equals(Color.WHITE)){ 
       //color = Color.TRANSPARENT; 
       xpoints.add(readX); 
       ypoints.add(readY); 
      }      
     } 
    } 

は私がして、ユーザから単語の寄せ集めを得る:

私は手紙Aの画像からすべてのポイントを取得するためにPixelReaderを使用していましたA私はその金型内にテキストを一様に書きたいと思っています...

私はいくつか失敗しました

for(int ix = 0;ix<xpoints.size();ix+=100){ 
    String nextWord = getRandomSmallWord(); 
    int nextwordlength = nextWord.length(); 
    int currentX = xpoints.get(ix); 
    int currentY = ypoints.get(ix); 
    gc.strokeText(nextWord,currentX,currentY); 
    //gc.strokeText(nextWord,currentX+5,currentY+5); 
    //gc.strokeText(getRandomSmallWord(),(currentX+nextwordlength),currentY,30.0); 
    System.out.println("("+currentX+", "+currentY+")"); 

} 

私はあなたの知恵を私に貸し出しています!

+0

私はあなたが求めているものを理解していません。あなたはあなたが望む結果の例を含むイメージを持っていますか? 'bigWord'と' littlewords'の値の例を挙げられますか? – VGR

+0

私はすべての文字の黒と白のブロックイメージを持っていますが、私は過去のAを得ていませんが、pixreaderはそのイメージを構成するすべての点の座標をすべて描画します。 bigWordとlittlewordはユーザーの入力に関係なく、その部分は無事です。 – madmax

+0

例入力とサンプル出力を使って質問をすぐに更新できるようになればなるほど、私はあなたの問題をより早く理解することができます。私はあなたが文字Aのピクセルを保存していることを理解していますが、それらのピクセルで何をしようとしているのか分かりません。 – VGR

答えて

2

これは実際にはStackOverflowスタイルの質問ではなく、おそらく私はここで答えるべきではありません。しかし、とにかく、ここに小さな単語からなる単語を作成する1つのアプローチのサンプルがあります。キャンバスは使用しませんが、代わりに混合ラベルを使用します。おそらくあなたにとって有益なことではありませんが、考えるべきアイデアを与えるかもしれません。少なくとも、あなたが達成しようとしていることと、あなたがそれを達成することを妨げている正確な問題は何かをより完全に説明するために、あなたの質問を編集し明確にするのに役立つことを願っています。

image

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Label; 
import javafx.scene.effect.BlendMode; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Stage; 

import java.util.stream.Collectors; 
import java.util.stream.IntStream; 

public class WordViewer extends Application { 

    private static final int NUM_ITERATIONS = 200; 
    private static final String bigWords = 
      "Lorem"; 
    private static final String littleWords = 
      "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; 

    public void start(Stage stage) { 
     Label smallLabel = new Label(
       IntStream.range(0, NUM_ITERATIONS) 
         .mapToObj(i -> littleWords) 
         .collect(Collectors.joining(" ")) 
     ); 
     smallLabel.setStyle(
       "-fx-font-size: 9px; " + 
       "-fx-background-color: black; " + 
       "-fx-text-fill: white" 
     ); 
     smallLabel.setWrapText(true); 
     smallLabel.setPrefWidth(1350); 

     Label largeLabel = new Label(bigWords); 
     largeLabel.setStyle(
       "-fx-font-size: 400px; " + 
       "-fx-background-color: black; " + 
       "-fx-text-fill: white" 
     ); 

     largeLabel.prefWidthProperty().bind(smallLabel.widthProperty()); 
     largeLabel.prefHeightProperty().bind(smallLabel.heightProperty()); 
     largeLabel.setAlignment(Pos.CENTER); 

     largeLabel.setBlendMode(BlendMode.MULTIPLY); 

     StackPane layout = new StackPane(
       smallLabel, 
       largeLabel 
     ); 

     Scene scene = new Scene(layout); 
     stage.setScene(scene); 
     stage.show(); 
    } 
} 
+0

それは素晴らしいです!私はブレンドmdoesについて何も知らなかった! – Omid

+1

多少困難な問題を非常に簡単なものにします;-) – jewelsea

関連する問題