1

(リンクは申し訳ありませんが、私は新しく、画像を投稿できません)

私は次のことを達成したいと思います:上部に凡例があり、斜めにテーブルを作成します。

http://i.stack.imgur.com/HqtJL.png

しかし、いくつか問題があります。次の画像があり、45°回転させようとしています(結果は右側にあります)。

http://i.stack.imgur.com/KOlIK.png

これが私のコードです:

//just some labels
ArrayList<String> labels = new ArrayList<String>();
labels.add("Juan");
labels.add("QWERTYYY");
labels.add("ANA");

// margin
int margin=3;

//diagonal = 45º
// value to shift each label 
int diagonalShift = (int)(cellSizeWidth / Math.sqrt(2d));

// height, width represent the size of the final image
// heightSub, widthSub represent the size of the image to be rotated taking into account the shift for each label
int widthSub = height + (diagonalShift * labels.size());
int heightSub = width;


// image to Display 
BufferedImage image = new BufferedImage(height, width, BufferedImage.TYPE_INT_RGB);
Graphics2D imageGraphics = (Graphics2D) image.getGraphics();

// tempImage: subImage to rotate and place in image
BufferedImage tempImage = new BufferedImage(widthSub, heightSub, BufferedImage.TYPE_INT_RGB);
Graphics2D tempImageGraphics = (Graphics2D) tempImage.getGraphics();
tempImageGraphics.setColor(Color.BLUE);
tempImageGraphics.drawRect(0, 0, widthSub-1, heightSub-1);

// I'd like to use antialias, but it's giving bad results
// tempImageGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);


// drawing labels
// as we're designing a table cellSizeWidth and CellSizeHeight represent the dimensions for each cell
tempImageGraphics.setColor(Color.WHITE);
for (int i = 0; i < labels.size(); i++) {
    String label = labels.get(i);
    tempImageGraphics.drawString(label,
                                 margin + (i * diagonalShift),
                                 (int) (i * cellSizeWidth) + fontSize + centerDistance);
}

私は次のことを試しました:

//rotating
AffineTransform fontAfineTransform = new AffineTransform();
// fontAfineTransform.rotate(verticalTextDirection.rotationAngle());

結果として、2番目の画像2の右側の画像が得られます。

だから私はそれを正しい位置にするために翻訳を適用する必要があります

// Math.sqrt(2d) because I'm working with 45º and the height becomes the hypotenuse
// fontAfineTransform.translate(-height/Math.sqrt(2d),height/Math.sqrt(2d));


//drawing into image
imageGraphics.drawImage(tempImage, fontAfineTransform, null);

誰かがaffineTransformがどのように機能するか、またはテキストを斜めに表示する方法を説明できますか?

ありがとう

4

0 に答える 0