BowlerKernel
AbstractImageProvider.java
Go to the documentation of this file.
1 package com.neuronrobotics.imageprovider;
2 
3 import java.awt.Graphics;
4 import java.awt.image.BufferedImage;
5 import java.awt.image.ColorModel;
6 import java.awt.image.DataBufferByte;
7 import java.awt.image.WritableRaster;
8 import java.io.ByteArrayInputStream;
9 import java.io.ByteArrayOutputStream;
10 import java.io.File;
11 import java.io.IOException;
12 
13 
14 import javax.imageio.ImageIO;
15 
16 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
17 import com.neuronrobotics.sdk.common.BowlerDatagram;
18 import com.neuronrobotics.sdk.common.InvalidConnectionException;
19 import com.neuronrobotics.sdk.common.NonBowlerDevice;
20 
26 public abstract class AbstractImageProvider extends NonBowlerDevice {
27  private BufferedImage image = null;
28  private javafx.scene.transform.Affine globalPos;
34  protected abstract boolean captureNewImage(BufferedImage imageData);
35 
40  public abstract BufferedImage captureNewImage();
41 
42  @Override
43  public void onAsyncResponse(BowlerDatagram data) {
44  // TODO Auto-generated method stub
45 
46  }
47 
48  @Override
49  public boolean connect(){
50  return true;
51  }
52 
59  @Override
60  public boolean isAvailable() throws InvalidConnectionException{
61  return true;
62  }
63 
64 
65 
71  public static void deepCopy(BufferedImage src, BufferedImage dest) {
72  Graphics g = dest.createGraphics();
73  g.drawImage(src, 0, 0, null);
74  }
75 
81  public BufferedImage getLatestImage(BufferedImage inputImage, BufferedImage displayImage){
82  captureNewImage(inputImage);
83  if(displayImage!=null){
84  AbstractImageProvider.deepCopy(inputImage,displayImage);
85  }
86  image = inputImage;
87 
88  return image;
89  }
90 
94  public BufferedImage getLatestImage(){
95  return image;
96  }
97 
103  public static BufferedImage newBufferImage(int w, int h) {
104  return new BufferedImage(w, h, BufferedImage.TYPE_3BYTE_BGR);
105 
106  }
107 
108 
109 
116  public static BufferedImage toGrayScale(BufferedImage in, int w, int h) {
117  BufferedImage bi = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
118  Graphics g = bi.createGraphics();
119  g.drawImage(in, 0, 0, w, h, null);
120  return bi;
121  }
122 
128  public static BufferedImage toGrayScale(BufferedImage in, double scale) {
129  int w = (int) (in.getWidth() * scale);
130  int h = (int) (in.getHeight() * scale);
131  return toGrayScale(in, w, h);
132  }
137  public static javafx.scene.image.Image getJfxImage(BufferedImage bf) {
138  ByteArrayOutputStream out = new ByteArrayOutputStream();
139  try {
140  ImageIO.write( bf, "png", out);
141  out.flush();
142  } catch (IOException ex) {
143 
144  }
145  ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
146  return new javafx.scene.image.Image(in);
147  }
151  public javafx.scene.image.Image getLatestJfxImage() {
152  return getJfxImage(getLatestImage());
153  }
154 
158  public void setGlobalPositionListener(javafx.scene.transform.Affine globalPos) {
159  this.setGlobalPos(globalPos);
160  }
161 
165  public javafx.scene.transform.Affine getGlobalPos() {
166  return globalPos;
167  }
168 
172  public void setGlobalPos(javafx.scene.transform.Affine globalPos) {
173  this.globalPos = globalPos;
174 
175  }
176 }
abstract boolean captureNewImage(BufferedImage imageData)
BufferedImage getLatestImage(BufferedImage inputImage, BufferedImage displayImage)
static BufferedImage toGrayScale(BufferedImage in, double scale)
static void deepCopy(BufferedImage src, BufferedImage dest)
void setGlobalPos(javafx.scene.transform.Affine globalPos)
static javafx.scene.image.Image getJfxImage(BufferedImage bf)
static BufferedImage toGrayScale(BufferedImage in, int w, int h)
void setGlobalPositionListener(javafx.scene.transform.Affine globalPos)