Java Byte array to uint8 array

I call java functions which return what is supposed to be a uint8 image with values from 0 to 255.
import java.ij.*;
I = ij.ImagePlus('filepath'); %read an 8bit image from file to java.ij.ImagePlus object
Idata= Ip.getImageStack().getImageArray(); %getImageArray() an array of Java Byte s
Idata % a matlab array of int8 values
In Java, it's a ByteArray with 8-bit entries. On returning the data to matlab, the Byte type gets automatically converted to int8, not uint8.
https://uk.mathworks.com/help/mps/java/conversion-of-java-types-to-matlab-types.html
The numbers are in range -127 to 128, not 0 to 255.
How can I force the Java Byte to be interpreted as uint8, OR convert matlab int8 to uint8 afterwards?

 Accepted Answer

siz = size(Idata);
Idata = reshape(typecast(Idata(:), 'uint8'), siz);

3 Comments

arrayfun(@(x) typecast(x,'uint8'), Idata)
Why arrayfun? Does this indirection have a benefit?
I thought to save on a reshape operation and a line, but actually your vectorized version is much faster.

Sign in to comment.

More Answers (0)

Asked:

on 1 Mar 2023

Commented:

on 3 Mar 2023

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!