forked from connordelacruz/ChannelShiftGUI
-
Notifications
You must be signed in to change notification settings - Fork 0
/
previewWindow.pde
91 lines (76 loc) · 2.98 KB
/
previewWindow.pde
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
// =============================================================================
// Globals and logic related to the image preview window
// =============================================================================
// Manager =====================================================================
/**
* Manages the preview window dimensions
*/
public class WindowManager {
// Window dimensions
public int width, height;
// Preview window size (does not affect output image size)
public int maxWindowSize;
// Set to true if the preview image has been modified since the last time it
// was rendered, telling the draw() method that it needs to be re-drawn
public boolean previewImgUpdated;
public WindowManager() {
width = height = 0;
maxWindowSize = 800;
previewImgUpdated = true;
}
// Getter/Setter Methods
public void updateWindowDimensions(PImage img) {
int[] dimensions = calculateWindowDimensions(img);
width = dimensions[0];
height = dimensions[1];
surface.setSize(width, height);
surface.setLocation((displayWidth / 2) + 50, (displayHeight / 2) - (height / 2));
}
public void previewImgUpdated(boolean wasUpdated) {
previewImgUpdated = wasUpdated;
}
public void previewImgUpdated() { previewImgUpdated(true); }
public void previewImgDrawn() { previewImgUpdated(false); }
// Display preview image
// Redraw if previewImgUpdated
public void updatePreview(PImage previewImg) {
if (previewImgUpdated)
drawPreview(previewImg);
}
public void drawPreview(PImage previewImg) {
image(previewImg, 0, 0, width, height);
previewImgDrawn();
}
// Helpers
/**
* Calculate window dimensions based on image size and maxWindowSize config
* @param img The PImage object that will be displayed in the window
* @return A 2D array where [0] = width and [1] = height
*/
int[] calculateWindowDimensions(PImage img) {
int[] dimensions;
float ratio = (float) img.width/img.height;
// Set longer side to maxWindowSize, then multiply ratio by the shorter side to
// maintain aspect ratio
if (ratio < 1.0) {
dimensions = new int[]{(int)(maxWindowSize * ratio), maxWindowSize};
} else {
dimensions = new int[]{maxWindowSize, (int)(maxWindowSize / ratio)};
}
return dimensions;
}
}
// Helper Methods ==============================================================
// Displaying Preview ----------------------------------------------------------
/**
* Sets previewImg to a copy of targetImg and calls shiftChannel(). Sets
* previewImgUpdated to true and calls previewImg.updatePixels() after shifting
*/
void showPreview() {
// Make sure preview image matches target
imgManager.copyTargetToPreview();
shiftChannel(imgManager.sourceImg, imgManager.previewImg, xShiftManager.shiftAmount, yShiftManager.shiftAmount, channelManager.sourceChannel, channelManager.targetChannel);
// Update preview image pixels and redraw
imgManager.updatePreview();
windowManager.previewImgUpdated();
}