[ImageJ-devel] Img <-> BufferedImage conversion

Curtis Rueden ctrueden at wisc.edu
Wed Aug 20 12:56:29 CDT 2014


Hi Brian,

> One thing I need to do is transform Img (actually ArrayImg) objects to
> BufferedImages.

Note that if what you want is to transform N-dimensional Imgs to _rendered_
BufferedImages (e.g., at specific planes, perhaps composited, and so
forth), you can use the Projector and Converter API:

https://github.com/imglib/imglib/tree/imglib2-2.0.0-beta-26/core/src/main/java/net/imglib2/display/projector
https://github.com/imglib/imglib/tree/imglib2-2.0.0-beta-26/core/src/main/java/net/imglib2/converter

This is how ImageJ2 actually paints Img objects on screen, using
CompositeXYProjector and RealLUTConverter.

If, on the other hand, you actually want the BufferedImage objects to
contain raw data, it might be helpful for you to describe your use case in
more detail. In my experience, BufferedImages are designed for image data
intended for blitting to the screen, as opposed to raw scientific image
samples. Trying to use them for the latter is likely to cause more problems
than it solves.

Regards,
Curtis


On Wed, Aug 20, 2014 at 11:41 AM, Brian Schlining <bschlining at gmail.com>
wrote:

> Hi Tobias (et al),
>
> Thanks for getting back to me.
>
> So it sounds like to go full round trip from ArrayImg[x, y, 3] ->
> BufferedImage -> ArrayImg[x, y, 3] I’ll need to manually unpack values
> from the buffered image. Something like:
>
> val arraying = // initialize empty ArrayImg
> val cursor = arrayImg.randomAccess()
>
> for (x <- 0 until bufferedImage.getWidth;
>      y <- 0 until bufferedImage.getHeight) {
>
>   val rgb: Int = bufferedImage.getRGB
>   val b: Array[Byte] = // unpack rbg to components
>   for (c <- 0 until 3) {
>         cursor.setPosition(x, y, c)
>         cursor.get.set(b(c))
>   }
> }
>
> Does that sound like the correct thing to do?
>
> Thanks for you help
>
> Brian
>
>
>
> On August 20, 2014 at 2:10:45 AM, Tobias Pietzsch (pietzsch at mpi-cbg.de)
> wrote:
>
> Hi Brian,
>
> BufferedImage is always 2D, so you cannot have a BufferedImage with
> dimensions (height, width, 3).
>
> If you know that you have an ArrayImg and you know the pixel Type, you can
> get to the underlying primitive array, for example
>  byte[] array = ( byte[] ) ( ( ArrayDataAccess< ? > ) img.update( null )
> ).getCurrentStorageArray()
>  if you know that img is a UnsignedByteType ArrayImg. Then you wrap that
> in a BufferedImage.
>
> You can do the same thing the other way around: Get the primitive array
> from the BufferedImage and wrap it in an ArrayImg.
>
> Essentially the code you found does that for you for the standard
> PixelTypes (UnsignedByteType, ARGBType, etc )...
>
> best regards,
> Tobias
>
>  On 20 Aug 2014, at 00:20, Brian Schlining <bschlining at gmail.com> wrote:
>
>   Hi All,
>
> I’m trying to use imglib2 for some image processing. One thing I need to
> do is transform Img (actually ArrayImg) objects to BufferedImages. I’d also
> like to be able to transform those BufferedImages back into ArrayImg
> objects. For the most part I’m currently working with just PNG and JPEG
> (i.e. ARGB).
>
> *I think I found a way to convert an Img to BufferedImage, but I’m not
> sure this is the recommended method. So if anyone has a better
> recommendation, please let me know!!* Here’s the method I found:
>
> // Scala code, sorry Java folks.
>
> import net.imglib2.img.display.imagej.ImageJFunctions
>
> val imagePlus = ImageJFunctions.wrap(img, "")
> val bufferedImage = imagePlus.getBufferedImage
>
>
> *How do I convert the buffered image back to an Img object?* I saw this
> code at https://github.com/imglib/imglib/…/BufferedImageImg.java
> <https://github.com/imglib/imglib/blob/imglib2-2.0.0-beta-21/scripting/src/main/java/net/imglib2/script/bufferedimag/BufferedImageImg.java>,
> but the resulting ArrayImg has dimensions of (height, width, 1) instead of
> the expected dimensions of (heigh, width, 3), so it doesn’t appear to be
> doing the right thing.
>
> Thanks!
>
> Brian
>
>
>  --
> Brian Schlining
>
>  _______________________________________________
> ImageJ-devel mailing list
>  ImageJ-devel at imagej.net
>  http://imagej.net/mailman/listinfo/imagej-devel
>
>
> ------------------------------
>
> --
> Brian Schlining
>
>
> _______________________________________________
> ImageJ-devel mailing list
> ImageJ-devel at imagej.net
> http://imagej.net/mailman/listinfo/imagej-devel
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20140820/3381157c/attachment.html>


More information about the ImageJ-devel mailing list