I am trying to allocate the memory for a bitmap in java and have a C library
manipulate it.
I have found that I can do the following:
Memory ptr = new Memory(pixWidth * pixHeight * pixDepth);
I then pass the ptr to the C routines via JNA, when the library is done I do
the following to get the image to the screen:
renderImage = (BufferedImage) createImage(width, height);
int [] buffer = ptr.getIntArray((long) 0, (int) ptr.getSize() / 4);
renderImage.setRGB(0, 0, pixWidth, pixHeight, buffer, 0, pixWidth);
g2d.drawImage(renderImage, 0, 0, width, height, null);
All of this works fine, except it can't keep up at a decent frame rate if
the bitmap gets large (> 320x240).
If I comment out the ptr.getIntArray() line then both the native library and
the java app can run without dropping frames.
Is there a way to get a JNA Pointer directly from the int [] so that I don't
have to do the copy that ptr.getIntArray() must be doing? That way the
setRGB() method will simply operate on the existing int [] that is being
manipulated in the C library as ptr.
-Doug