[ImageJ-devel] Img <-> BufferedImage conversion
Brian Schlining
bschlining at gmail.com
Wed Aug 20 11:41:49 CDT 2014
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, 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://imagej.net/pipermail/imagej-devel/attachments/20140820/066bf9cd/attachment.html>
More information about the ImageJ-devel
mailing list