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 package org.openimaj.demos.acmmm11.presentation.slides.tutorial;
31
32 import java.awt.Dimension;
33 import java.awt.GridBagLayout;
34 import java.awt.Insets;
35 import java.awt.image.BufferedImage;
36
37 import javax.swing.BorderFactory;
38 import javax.swing.JPanel;
39
40 import org.openimaj.image.DisplayUtilities.ScalingImageComponent;
41 import org.openimaj.image.ImageUtilities;
42 import org.openimaj.image.MBFImage;
43 import org.openimaj.video.Video;
44 import org.openimaj.video.VideoDisplay;
45 import org.openimaj.video.VideoDisplayListener;
46
47
48
49
50
51
52
53
54 public abstract class TutorialPanel extends JPanel implements VideoDisplayListener<MBFImage>{
55 private static final long serialVersionUID = 2105054613577879944L;
56
57 private MBFImage toDraw;
58 private BufferedImage bimg;
59 private ScalingImageComponent comp;
60
61
62
63
64
65
66
67
68
69 public TutorialPanel(String name, Video<MBFImage> capture, int width, int height) {
70 this.setOpaque( false );
71
72 this.setBorder( BorderFactory.createTitledBorder( name ) );
73
74 this.setLayout(new GridBagLayout());
75
76 this.comp = new ScalingImageComponent();
77 this.add(comp);
78
79 toDraw = new MBFImage(width,height,3);
80 }
81
82 @Override
83 public void afterUpdate(VideoDisplay<MBFImage> display) {
84
85 }
86
87 @Override
88 public void beforeUpdate(MBFImage frame) {
89 if (this.comp.getWidth() <= 10) {
90 Insets insets = this.getInsets();
91 int width = this.getWidth() - insets.left - insets.right;
92 int height = (int) (((float)width / (float)frame.getWidth())*frame.getHeight());
93
94 this.comp.setSize(width, height);
95 this.comp.setPreferredSize(new Dimension(width,height));
96 this.validate();
97 }
98
99 toDraw.internalCopy(frame);
100 doTutorial(toDraw);
101 this.comp.setImage(bimg = ImageUtilities.createBufferedImageForDisplay( toDraw, bimg ));
102 }
103
104
105
106
107
108 public abstract void doTutorial(MBFImage toDraw);
109 }