package camera;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.image.ImageObserver;
import org.osgi.service.log.LogService;
// TODO: double buffering is pointless right now,
// since it only helps if drawing is more involved
// than drawing the image on-screen (since that's what
// we end up having to do from bufferImage to the screen),
// and right now all we're doing is drawing an image.
// It might be handy once we're overlaying buttons etc.
public class PreviewPanel
extends Panel
implements ImageObserver {
private static final long serialVersionUID = -8250386972024162735L;
private final LogService log;
private Image image;
PreviewPanel(LogService log) {
this.log = log;
}
public void wipe() {
log.log(LogService.LOG_DEBUG, "PreviewPanel wiping");
this.image = null;
repaint();
}
public void setImage(Image image) {
log.log(LogService.LOG_DEBUG, "PreviewPanel set image");
// we receive the full image, so we need to scale it down
// to fit on our panel before we can display it
this.image = image.getScaledInstance(getWidth(), getHeight(), Image.SCALE_FAST);
repaint();
}
// overridden to avoid flicker
public void update(Graphics g){
//log.log(LogService.LOG_DEBUG, "PreviewPanel.update");
paint(g);
}
public void paint(Graphics g) {
if (image != null) {
//log.log(LogService.LOG_DEBUG, "PreviewPanel drawing image");
g.drawImage(image, 0, 0, this);
}
else {
// just clear out any old image
g.clearRect(0, 0, getWidth(), getHeight());
}
}
}