Kostya

I did some research and found a solution to my issue based on your
suggestion which might help someone else out as well.

I found this link which has code to read/write out a .BMP file like you
suggested (WITHOUT using the javax.imageio because Android doesn't support
it).

http://research.cs.queensu.ca/~blostein/java.html

So I can now write my uncompressed data out as a windows bitmap (.bmp). Then
read it in on the server side and convert it to PNG or just view it.
All this saves my Android app from calling the Bitmap.compress() which is
very expensive.

Thanks again Kostya for sending me down the right path.

-Chris



On Wed, Jan 5, 2011 at 10:24 AM, chris harper <ch393...@gmail.com> wrote:

> 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 <kmans...@gmail.com>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 android-developers@googlegroups.com
>>> To unsubscribe from this group, send email to
>>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>>> 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 android-developers@googlegroups.com
>> To unsubscribe from this group, send email to
>> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
>> 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 android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to