J008 Adding binary samples
Binary signals are built of byte arrays. In this example we use binary signals to display images.
Binary Signals
In general, the binary data can be anything. If BINARY_CONTENT_IMAGE is selected, the binary data shall be in form of packed images supported by the SWT ImageLoader("WinBMP", "WinBMP", "GIF", "WinICO", "JPEG", "PNG", "TIFF", "OS2BMP") .
Interface
This is the interface:
public interface IBinarySamplesWriter extends ISamplesWriter{ boolean write(long units, boolean conflict, byte[] value); }
The parameters have the following meaning:
- units
- No of domain units (e.g. ns)
- conflict
- Define this sample as a conflict one.
- value
- An array of byte
Creating
Now take a look at these examples (out of de.toem.impulse.serializer.ExampleBinaryReaderReader):
Scope signals = addScope(null, "Signals"); Signal image1 = addSignal(signals, "Image", "An image signal", ProcessType.Discrete, SignalType.Binary, new SignalDescriptor( SignalDescriptor.BINARY_CONTENT_IMAGE));
To create a binary signal, you need to give the signal type SignalType.Binary and a signal descriptor with its content description (STRUCT_BINARY_IMAGE,..).
Writing an image signal
Here an example that writes png images from a a gif sequence.
// images IBinarySamplesWriter imageWriter = (IBinarySamplesWriter) getWriter(image1); try { ImageData[] imageData = new ImageLoader() .load(EclipseBundles.getBundleEntryAsStream( ExtensionToolkit.PLUGIN_ID, "input.gif")); for (ImageData data : imageData) { ImageLoader loader = new ImageLoader(); loader.data = new ImageData[] { data }; ByteArrayOutputStream out = new ByteArrayOutputStream(); loader.save(out, SWT.IMAGE_PNG); out.close(); imageWriter.write(t, false, out.toByteArray()); t += 500; } } catch (IOException e) { }