Refactored the MonochromeBitmapSource class hierarchy into LuminanceSource, Binarizer...
[zxing.git] / bug / src / com / google / zxing / client / bug / app / BugBarcodeApp.java
index 01d6d05..461bc25 100644 (file)
 
 package com.google.zxing.client.bug.app;
 
-import com.buglabs.bug.module.camera.pub.ICameraDevice;
-import com.buglabs.bug.module.camera.pub.ICameraModuleControl;
-import com.buglabs.device.ButtonEvent;
-import com.buglabs.device.IButtonEventListener;
-import com.buglabs.device.IButtonEventProvider;
-import com.google.zxing.MonochromeBitmapSource;
+import com.google.zxing.BinaryBitmap;
+import com.google.zxing.LuminanceSource;
 import com.google.zxing.MultiFormatReader;
 import com.google.zxing.Reader;
 import com.google.zxing.ReaderException;
 import com.google.zxing.Result;
-import com.google.zxing.client.bug.AWTImageMonochromeBitmapSource;
+import com.google.zxing.client.bug.AWTImageLuminanceSource;
 import com.google.zxing.client.bug.ImageCanvas;
+import com.google.zxing.common.GlobalHistogramBinarizer;
+
+import com.buglabs.bug.module.camera.pub.ICameraDevice;
+import com.buglabs.bug.module.camera.pub.ICameraModuleControl;
+import com.buglabs.device.ButtonEvent;
+import com.buglabs.device.IButtonEventListener;
+import com.buglabs.device.IButtonEventProvider;
 
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Frame;
-import java.awt.Image;
-import java.awt.Label;
-import java.awt.Toolkit;
+import java.awt.*;
 import java.awt.image.ImageObserver;
 import java.io.IOException;
 
@@ -43,80 +41,82 @@ import java.io.IOException;
  */
 public final class BugBarcodeApp implements IButtonEventListener, ImageObserver {
 
-       private final ICameraDevice camera;
+  private final ICameraDevice camera;
   private final ICameraModuleControl cameraControl;
-       private final Frame frame;
-       private Image image;
-       private ImageCanvas imageCanvas;
-       private Label barcodeLabel;
-       private boolean pictureTaken;
-       private final Reader reader;
+  private final Frame frame;
+  private Image image;
+  private ImageCanvas imageCanvas;
+  private Label barcodeLabel;
+  private boolean pictureTaken;
+  private final Reader reader;
 
   public BugBarcodeApp(Frame frame,
-                       ICameraDevice camera,
-                       ICameraModuleControl cameraControl,
-                       IButtonEventProvider buttonProvider) {
-               this.frame = frame;
-               this.camera = camera;
-               this.reader = new MultiFormatReader();
-               this.cameraControl = cameraControl;
-               pictureTaken = false;
-               buttonProvider.addListener(this);
-               createUI();
-       }
-       
-       private void createUI() {
-               frame.setTitle("BugBarcode");
-               frame.setBackground(Color.WHITE);
-               frame.setLayout(new BorderLayout());
-               barcodeLabel = new Label("Take a picture of a barcode!", Label.CENTER);
-               frame.add(barcodeLabel, BorderLayout.SOUTH);
-               imageCanvas = new ImageCanvas(null);
-               frame.setVisible(true);
-       }
-       
-       private void shoot() throws IOException {
-               // get image from camera for use with physical bug
-         cameraControl.setLEDFlash(true);
-               image = Toolkit.getDefaultToolkit().createImage(camera.getImage()).getScaledInstance(400, 300, Image.SCALE_FAST);
-         cameraControl.setLEDFlash(false);
-               if (Toolkit.getDefaultToolkit().prepareImage(image, -1, -1, this)) {
-                       drawAndScan();
-               }
-       }
-       
-       private void drawAndScan() {
-               imageCanvas.setImage(image.getScaledInstance(216, 150, Image.SCALE_FAST));
-               if (!pictureTaken) {
-                       frame.add(imageCanvas, BorderLayout.CENTER);
-                       pictureTaken = true;
-                       frame.setVisible(true);
-               }
-               imageCanvas.repaint();
-               try {
-      MonochromeBitmapSource source = new AWTImageMonochromeBitmapSource(image);
-      Result result = reader.decode(source);
-                       barcodeLabel.setText(result.getText());
-               } catch (ReaderException re) {
-                       barcodeLabel.setText("I can't find a barcode here");
-               }
-       }
-       
-       public void buttonEvent(ButtonEvent event) {
-               if (event.getButton() == ButtonEvent.BUTTON_HOTKEY_1 && event.getAction() == 0) {
+      ICameraDevice camera,
+      ICameraModuleControl cameraControl,
+      IButtonEventProvider buttonProvider) {
+    this.frame = frame;
+    this.camera = camera;
+    this.reader = new MultiFormatReader();
+    this.cameraControl = cameraControl;
+    pictureTaken = false;
+    buttonProvider.addListener(this);
+    createUI();
+  }
+
+  private void createUI() {
+    frame.setTitle("BugBarcode");
+    frame.setBackground(Color.WHITE);
+    frame.setLayout(new BorderLayout());
+    barcodeLabel = new Label("Take a picture of a barcode!", Label.CENTER);
+    frame.add(barcodeLabel, BorderLayout.SOUTH);
+    imageCanvas = new ImageCanvas(null);
+    frame.setVisible(true);
+  }
+
+  private void shoot() throws IOException {
+    // get image from camera for use with physical bug
+    cameraControl.setLEDFlash(true);
+    image = Toolkit.getDefaultToolkit().createImage(camera.getImage()).getScaledInstance(400, 300,
+        Image.SCALE_FAST);
+    cameraControl.setLEDFlash(false);
+    if (Toolkit.getDefaultToolkit().prepareImage(image, -1, -1, this)) {
+      drawAndScan();
+    }
+  }
+
+  private void drawAndScan() {
+    imageCanvas.setImage(image.getScaledInstance(216, 150, Image.SCALE_FAST));
+    if (!pictureTaken) {
+      frame.add(imageCanvas, BorderLayout.CENTER);
+      pictureTaken = true;
+      frame.setVisible(true);
+    }
+    imageCanvas.repaint();
+    try {
+      LuminanceSource source = new AWTImageLuminanceSource(image);
+      BinaryBitmap bitmap = new BinaryBitmap(new GlobalHistogramBinarizer(source));
+      Result result = reader.decode(bitmap);
+      barcodeLabel.setText(result.getText());
+    } catch (ReaderException re) {
+      barcodeLabel.setText("I can't find a barcode here");
+    }
+  }
+
+  public void buttonEvent(ButtonEvent event) {
+    if (event.getButton() == ButtonEvent.BUTTON_HOTKEY_1 && event.getAction() == 0) {
       try {
         shoot();
       } catch (IOException ioe) {
         // continue
       }
     }
-       }
+  }
 
-       public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
-               if ((infoflags & ALLBITS) != 0) {
+  public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) {
+    if ((infoflags & ALLBITS) != 0) {
       drawAndScan();
       return false;
-               }
-               return true;
-       }
+    }
+    return true;
+  }
 }