title: How to reduce the transparent bitmap size (not dimensions)
body: <p>In my android application I am working on canvas bitmaps (actually it is SCanvas from Samsung SPen SDK, but it does not matter), as a rule 90-95% of area of such bitmaps is transparent, so I expected to have not too large bitmap size in KB. But seems like bitmap size (in KB) does not depend on whether it is a simple background or complex picture, so for example if I have two images (sorry, I am a new user and I can't post any images):</p>
  
  <p>1) empty frame (1000x700 px, background is transparent, color border)</p>
  
  <p>2) full frame (1000x700 px, background is transparent, color border, a lot of text inside)</p>
  
  <p>the size of both bitmaps are about 1.3MB.</p>
  
  <p>But if I convert these bitmaps in byte arrays, the size of the first array is about 11 times less than the size of the second array.</p>
  
  <p>I have to store a lot of such images as BLOBs in DB and display them as ImageView bitmaps.</p>
  
  <p><strong>Question 1</strong>: if I need to display 20 ImageView objects with such 95% transparent images, is there any way to not use 20 * 1.3MB at the same time? To me it seems like it should be only 1 alpha layer + 20 "data" layers.</p>
  
  <p><strong>Question 2</strong>: is there any way to reduce size (in KB) of an image with transparency without losing too much quality? The only way I saw is to decode the image byte array with inSampleSize = 2 and then create a scaled bitmap to keep the original image dimensions, something like:</p>
  
  <pre><code>originalBitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
  byte[] bitmapBytes = stream.toByteArray();
  BitmapFactory.Options options = new BitmapFactory.Options();
  options.inJustDecodeBounds = true;
  BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length, options);
  int bWidth = options.outWidth;
  int bHeight = options.outHeight;
  options.inSampleSize = 2;
  options.inPreferredConfig = Bitmap.Config.ARGB_4444;
  options.inJustDecodeBounds = false;
  Bitmap scaledBitmap = BitmapFactory.decodeByteArray(bitmapBytes, 0, bitmapBytes.length, options);
  Bitmap finalBitmap = Bitmap.createScaledBitmap(scaledBitmap, bWidth, bHeight, true);
  </code></pre>
  
  <p>But the finalBitmap quality is unacceptable, no matter what options I used (inPreferredConfig, inDither).</p>
  
  <p>Any other thoughts about the optimal way to handle the images with about 90% of simple transparent background and 10% of one-color "data"?</p>