Kostya Your a saint. Thank you for the fast *response*.
I like your suggestion of writing it out in .BMP uncompressed format. Then I can just open it as a BMP and convert it to PNG (if need be) outside of android. That Wikipedia link looks very helpful. I'll give that a try. Thank you very much. -Chris On Wed, Jan 5, 2011 at 10:13 AM, Kostya Vasilyev <[email protected]> wrote: > PS - there is also this library from Sun / Oracle: > > http://java.sun.com/products/java-media/jai/iio.html > > which can save to PNG in one line of code: > > http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#save > > > -- Kostya > > 05.01.2011 20:02, chris harper пишет: > >> This a Bitmap question. >> >> >> Given an Android Bitmap which has been written to file I want to read the >> Android BitMap from the file and convert it to a PNG OUTSIDE of Android (via >> a regular java program). >> >> >> Here is how I am writing out the Bitmap to a file: >> screenShot - is a Bitmap >> >> //Get Bitmap information >> int height = screenShot.getHeight(); >> int width = screenShot.getWidth(); >> int bmSize = screenShot.getRowBytes() * height; >> >> //Write the Bitmap to a byte array >> ByteBuffer dst = ByteBuffer.allocate(bmSize); >> byte bytesar = new byte[bmSize]; >> dst.position(0); >> screenShot.copyPixelsToBuffer(dst); >> dst.position(0); >> dst.get(bytesar); >> >> //Write it to a file >> //I write out the height, width and size before the Bitmap data so I know >> what the Bitmap dimensions are when reading back in >> final int BUFFSIZE = 32 * 1024; >> final int streamBuffSizeInBytes = ( ( BUFFSIZE * 2 * 75 / 100 ) + 8 ) / 16 >> * 16; >> File f = new File("buffer"); >> BufferedOutputStream bout = new BufferedOutputStream(new >> FileOutputStream(filename), streamBuffSizeInBytes); >> out = new ObjectOutputStream(bout); >> out.writeInt(height); >> out.writeInt(width); >> out.writeInt(bmSize); >> out.write(bytesar, 0, bytesar.length); >> >> >> Now I realize that I can just write out the Bitmap in the from of a PNG >> via: >> >> screenShot.compress(Bitmap.CompressFormat.PNG, 90, output); >> >> The issue here is performance. I have a lot of images that I need to write >> out and this command is very expensive, time consuming and kills my >> performance: >> screenShot.compress(Bitmap.CompressFormat.PNG, 90, output); >> >> Where if I just grab the Bitmap and write it out using a >> BufferedOutputStream (as above) it is very fast and I can write many images >> to a file (or socket) very quickly. Then OUTSIDE of Android do the work to >> convert the Bitmap's to PNG file's. >> >> So the question I have is how can I read the Bitmap from a file OUTSIDE of >> Android and convert it to a PNG? >> Like I said I send the dimensions of the image before the image itself so >> I can read it back in via: >> out.writeInt(height); >> out.writeInt(width); >> out.writeInt(bmSize); >> out.write(bytesar, 0, bytesar.length); >> >> Essentially I need to do the Android command OUTSIDE of Android: >> BitMap.compress(Bitmap.CompressFormat.PNG, 90, output); >> >> Or find the Java command which does the same thing. >> Or how does Java "see" an Android Bitmap when I read it back in? >> I read where ByteBuffer is the same as Bitmap but in my tests (via writing >> out the Bitmap in Android and reading it in as a ByteBuffer in java) that >> does not appear to be the case. >> >> Any help would be wonderful. >> >> Thank you >> -Chris >> >> >> >> >> >> -- >> You received this message because you are subscribed to the Google >> Groups "Android Developers" group. >> To post to this group, send email to [email protected] >> To unsubscribe from this group, send email to >> [email protected]<android-developers%[email protected]> >> For more options, visit this group at >> http://groups.google.com/group/android-developers?hl=en >> > > > -- > Kostya Vasilyev -- WiFi Manager + pretty widget -- > http://kmansoft.wordpress.com > > -- > You received this message because you are subscribed to the Google > Groups "Android Developers" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected]<android-developers%[email protected]> > For more options, visit this group at > http://groups.google.com/group/android-developers?hl=en > -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

