On 08/05/13 17:52, Joshua Cranmer 🧠wrote:
On 5/8/2013 1:30 AM, sout saret wrote:
Dear Community!
May you help me how to write code in java to convert image to Hex 2
dimensional array. I want to show format as below:
What format is this two-dimensional array? Looking from your code, you
appear to want it to be some sort of 256-byte pixel value, but are you
desiring:
1. 8-bit ARGB
2. 5-6-5 RGB
3. 8-bit grayscale
4. 32-bit ARGB
5. 24-bit RGB
6. Binary version of any widely-used image format, including but not
limited to PNG, BMP, GIF, JPG, XBM, TIF, and ICO.
I think he wants a byte for byte copy so the first byte gets copied into
[0][0] the next into [1][0] the next [2][0] etc until [width-1][0]
then start again at [0][1], [1][1], [2][1] etc etc
A byte for byte copy of what? I'm guessing the answer is the "pixel
matrix", but that's underdefined since pixels can take on many different
formats, which is what I was trying to get at--what encoding of a pixel
is desired?
I've been thinking about this and actually, in a byte for byte copy
the 'encoding' of a pixel is irrelevant.
If I open a (for example) jpg image in a hex viewer(ghex) all I see is
a bunch of bytes. As far as ghex is concerned that's all it is.
The bunch of bytes is only an image if it is interpreted as an image by
software that knows how to interpret the data *as an image*.
So, as far as reading the data goes, all we have is a stream of bytes.
If we want to store these bytes in a matrix(for whatever reason) we may
have an immediate problem. It may be the case that the byte count is not
a 'perfect square', what this means is that there may eventually be a
number matrix cells that will not contain data that is relevant to the
byte stream we are reading.
So, how do we determine where in the matrix our data ends and the
default values used to populate the arrays on creation begin?
If we use byte[][] we have a problem.
All byte values from 0x00 - 0xFF *could* be valid data,
byte arrays have each cell initialized to 0 (0x00)
Byte arrays however have each cell initialized to null.
It will therefore be very easy to determine the end of data in a
Byte[][] matrix. In a byte[][] matrix we would have to add some
information somewhere outside of the matrix.
This situation only really applies if we wish to store our bytes in a
matrix. Obviously this is *not* a problem if we store the bytes in a
single dimension array.
So, I'm not so sure that the original advice was as bad as all that, it
depends on the end usage of the stored data.
As ever I'd be interested in any comments.