Re: How to create a TIFF image from a binary raw data
Jeff Higgins wrote:
...
Would you mind telling your variations?
Not at all. In fact, I'm glad you asked. I was tempted to
post it in my reply, but the changes were so trivial I thought
best not at the time.
<sscce>
import javax.imageio.ImageIO;
import javax.media.jai.PlanarImage;
import com.sun.media.jai.codec.ByteArraySeekableStream;
import com.sun.media.jai.codec.ImageCodec;
import com.sun.media.jai.codec.ImageDecoder;
import com.sun.media.jai.codec.SeekableStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.awt.Image;
import java.awt.image.RenderedImage;
import javax.swing.JOptionPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
public class ImageLoader
{
public static void main(String[] args)
{
for (String s : ImageIO.getReaderFormatNames())
System.out.println(s);
try
{
String path;
if (args.length==0)
{
path = JOptionPane
.showInputDialog(
null,
"Image Path",
"D:/PP/GAMMA.tif");
}
else
{
path = args[0];
}
FileInputStream in =
new FileInputStream(path);
FileChannel channel = in.getChannel();
ByteBuffer buffer =
ByteBuffer.allocate((int)channel.size());
channel.read(buffer);
Image image = load(buffer.array());
System.out.println("image: " + path + "\n" + image);
JOptionPane.showMessageDialog(null,
new JLabel(
new ImageIcon( image )) );
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
static Image load(byte[] data)
{
Image image = null;
try
{
SeekableStream stream =
new ByteArraySeekableStream(data);
String[] names =
ImageCodec.getDecoderNames(stream);
ImageDecoder dec =
ImageCodec.createImageDecoder(
names[0],
stream,
null);
RenderedImage im =
dec.decodeAsRenderedImage();
image =
PlanarImage.
wrapRenderedImage(im).
getAsBufferedImage();
}
catch (Exception e)
{
e.printStackTrace();
}
return image;
}
}
</sscce>
<beseechingly>
You'll have to forgive my failure to wrap those calls
to Swing methods in a Runnable, (shrugs) or perhaps
not. In any case, I am confident you are capable of
doing that yourself, and I wanted to post the code
*exactly* as I'd seen it work.
Oh, and if I was going to take it beyond 'absolutely trivial'
changes, I would probably swap that first input dialog for
a JFileChooser.
</beseechingly>
I swiped the code (with slight variations) from the
JAI-Demo project - JAIImageReader.java.
The source can be viewed here:
<http://preview.tinyurl.com/yubqol>
Cool. Thanks to 'aastha' for the original code, and you
for the alterations and link. That was actually the first
time I'd played with JAI, your post 'inspired me'. :-)
--
Andrew Thompson
http://www.athompson.info/andrew/
Message posted via JavaKB.com
http://www.javakb.com/Uwe/Forums.aspx/java-general/200710/1