Updated header parsing and support of the defined array-1.0 header type

...
This commit is contained in:
2013-06-17 16:25:18 +02:00
parent cd70bff6f5
commit 7d44d54356
2 changed files with 71 additions and 18 deletions

View File

@ -3,7 +3,7 @@
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>ch.psi</groupId> <groupId>ch.psi</groupId>
<artifactId>ch.psi.imagej.zeromq</artifactId> <artifactId>ch.psi.imagej.zeromq</artifactId>
<version>0.0.3-SNAPSHOT</version> <version>0.0.4-SNAPSHOT</version>
<dependencies> <dependencies>
<dependency> <dependency>
@ -11,6 +11,16 @@
<artifactId>jeromq</artifactId> <artifactId>jeromq</artifactId>
<version>0.2.0</version> <version>0.2.0</version>
</dependency> </dependency>
<!-- <dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20090211</version>
</dependency> -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.2.0</version>
</dependency>
<dependency> <dependency>
<groupId>gov.nih.imagej</groupId> <groupId>gov.nih.imagej</groupId>
<artifactId>imagej</artifactId> <artifactId>imagej</artifactId>

View File

@ -9,9 +9,13 @@ import ij.process.*;
import java.awt.*; import java.awt.*;
import ij.plugin.*; import ij.plugin.*;
import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.awt.event.*; import java.awt.event.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -21,6 +25,10 @@ import javax.swing.Timer;
import org.jeromq.ZMQ; import org.jeromq.ZMQ;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
public class ZeroMQViewer implements PlugIn { public class ZeroMQViewer implements PlugIn {
@ -58,6 +66,9 @@ public class ZeroMQViewer implements PlugIn {
private Semaphore semaphore = new Semaphore(1); private Semaphore semaphore = new Semaphore(1);
private JLabel lblMethod; private JLabel lblMethod;
private JComboBox<String> comboBoxMethod; private JComboBox<String> comboBoxMethod;
private ObjectMapper mapper = new ObjectMapper(new JsonFactory());
// private HeaderInfo hinfo = new HeaderInfo();
public void run(String arg) { public void run(String arg) {
IJ.showStatus("Running ZeroMQ Viewer"); IJ.showStatus("Running ZeroMQ Viewer");
@ -78,6 +89,7 @@ public class ZeroMQViewer implements PlugIn {
while (isPluginRunning) { while (isPluginRunning) {
semaphore.acquire(); semaphore.acquire();
collect=true; collect=true;
// hinfo.setVisible(true);
try{ try{
if(img!=null){ if(img!=null){
img.close(); img.close();
@ -136,28 +148,59 @@ public class ZeroMQViewer implements PlugIn {
} }
} }
private void readHeader(byte[] header){ @SuppressWarnings("unchecked")
String sheader = new String(header); private void readHeader(byte[] h){
logger.info(sheader); try{
String header = new String(h);
// hinfo.setHeader(header);
Map<String,Object> m = mapper.readValue(header, new TypeReference<HashMap<String,Object>>(){});
if(((List<String>) m.get("htype")).contains("array-1.0")){ // currently we only support array-1.0 message types
List<Integer> shape = (List<Integer>) m.get("shape");
int nImageSizeX = shape.get(1);
int nImageSizeY = shape.get(0);
if(imageSizeX!=nImageSizeX || imageSizeY!=nImageSizeY){
imageSizeX = nImageSizeX;
imageSizeY = nImageSizeY;
img.close();
img=null;
}
if (img == null) {
// TODO eventually use ByteProcessor or BinaryProcessor
// BinaryProcessor p = new ij.process.BinaryProcessor(new
// ByteProcessor(imageSizeX, imageSizeY));
img = new ImagePlus("", new ShortProcessor(imageSizeX, imageSizeY));
img.show();
}
img.setTitle(header);
}
else{
logger.info("Header type is not supported ...");
if(img!=null){
img.close();
img=null;
}
}
}
catch(IOException e){
logger.log(Level.SEVERE, "Unable to parse header", e);
}
// logger.info(sheader);
} }
private void readContent(byte[] content) { private void readContent(byte[] content) {
try { try {
if (img == null) { if(content!=null && img!=null){
// TODO eventually use ByteProcessor or BinaryProcessor // TODO Check whether this is needed
// BinaryProcessor p = new ij.process.BinaryProcessor(new short[] shorts = new short[content.length / 2];
// ByteProcessor(imageSizeX, imageSizeY)); ByteBuffer.wrap(content).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts);
img = new ImagePlus("", new ShortProcessor(imageSizeX, imageSizeY)); img.getProcessor().setPixels(shorts);
img.show();
img.updateAndDraw();
numImageUpdates++;
} }
// TODO Check whether this is needed
short[] shorts = new short[content.length / 2];
ByteBuffer.wrap(content).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(shorts);
img.getProcessor().setPixels(shorts);
img.updateAndDraw();
numImageUpdates++;
} catch (Exception ex) { } catch (Exception ex) {
logger.log(Level.SEVERE, "UpdateImage got exception", ex); logger.log(Level.SEVERE, "UpdateImage got exception", ex);
} }