-
Notifications
You must be signed in to change notification settings - Fork 13
/
Copy pathRotatedImages.java
144 lines (108 loc) · 4.11 KB
/
RotatedImages.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
* Java
*
* Copyright 2016-2022 MicroEJ Corp. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be found with this software.
*/
package com.microej.howto.microui.image;
import ej.drawing.TransformPainter;
import ej.microui.MicroUI;
import ej.microui.display.Colors;
import ej.microui.display.Display;
import ej.microui.display.Displayable;
import ej.microui.display.GraphicsContext;
import ej.microui.display.Image;
import ej.microui.display.Painter;
/**
* This class shows how to use the TransformPainter utility class with rotate draw methods.
*/
public class RotatedImages extends Displayable {
private final static int LEFT_IMAGE_ROTATION_ANGLE = 45;
private final static int RIGHT_IMAGE_ROTATION_ANGLE = 135;
private final int displayWidth;
private final int displayHeight;
private final int left;
private final int top;
private final int right;
private final int bottom;
private final Image image;
private final int halfImageWidth;
private final int halfImageHeight;
/**
* Instantiates the RotatedImages example.
*/
public RotatedImages() {
final Display display = Display.getDisplay();
this.image = Image.getImage("/images/mascot.png"); //$NON-NLS-1$
this.displayWidth = display.getWidth();
this.displayHeight = display.getHeight();
this.left = this.displayWidth / 4;
this.top = this.displayHeight / 4;
this.right = 3 * this.displayWidth / 4;
this.bottom = 3 * this.displayHeight / 4;
this.halfImageWidth = this.image.getWidth() / 2;
this.halfImageHeight = this.image.getHeight() / 2;
}
@Override
public void render(GraphicsContext g) {
// fill up background with black
g.setColor(Colors.BLACK);
Painter.fillRectangle(g, 0, 0, this.displayWidth, this.displayHeight);
// draws images
drawTopLeftRotatedImage(g);
drawTopRightRotatedImage(g);
drawBottomLeftRotatedImage(g);
drawBottomRightRotatedImage(g);
}
private void drawTopLeftRotatedImage(GraphicsContext g) {
// top-left corner - 45°
// Use the bilinear algorithm to render the image. This
// algorithm performs better rendering than nearest
// neighbor algorithm but it is slower to apply.
TransformPainter.drawRotatedImageBilinear(g, this.image, this.left - this.halfImageWidth,
this.top - this.halfImageHeight, this.left, this.top, LEFT_IMAGE_ROTATION_ANGLE);
}
private void drawTopRightRotatedImage(GraphicsContext g) {
// top-right corner - 135°
// Use the bilinear algorithm to render the image. This
// algorithm performs better rendering than nearest
// neighbor algorithm but it is slower to apply.
TransformPainter.drawRotatedImageBilinear(g, this.image, this.right - this.halfImageWidth,
this.top - this.halfImageHeight, this.right, this.top, RIGHT_IMAGE_ROTATION_ANGLE);
}
private void drawBottomLeftRotatedImage(GraphicsContext g) {
// bottom-left corner - 45°
// Uses the nearest neighbor algorithm to render the
// image. This algorithm is faster than bilinear
// algorithm but its rendering is more simple.
TransformPainter.drawRotatedImageBilinear(g, this.image, this.left - this.halfImageWidth,
this.bottom - this.halfImageHeight, this.left, this.bottom, LEFT_IMAGE_ROTATION_ANGLE);
}
private void drawBottomRightRotatedImage(GraphicsContext g) {
// bottom-right corner - 135°
// Uses the nearest neighbor algorithm to render the
// image. This algorithm is faster than bilinear
// algorithm but its rendering is more simple.
TransformPainter.drawRotatedImageBilinear(g, this.image, this.right - this.halfImageWidth,
this.bottom - this.halfImageHeight, this.right, this.bottom, RIGHT_IMAGE_ROTATION_ANGLE);
}
/**
* Entry Point for the example.
*
* @param args
* Not used.
*/
public static void main(String[] args) {
// A call to MicroUI.start is required to initialize the graphics
// runtime environment
MicroUI.start();
// We will need to access the display to draw stuff
RotatedImages sample = new RotatedImages();
Display.getDisplay().requestShow(sample);
}
@Override
public boolean handleEvent(int event) {
// No event handling is required for this sample.
return false;
}
}