Home | History | Annotate | Download | only in graphics
      1 /*
      2  * Copyright (C) 2007 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.apis.graphics;
     18 
     19 import com.example.android.apis.R;
     20 
     21 import android.content.Context;
     22 import android.graphics.*;
     23 import android.graphics.drawable.*;
     24 import android.os.Bundle;
     25 import android.view.*;
     26 
     27 import java.io.InputStream;
     28 import java.io.ByteArrayOutputStream;
     29 
     30 public class BitmapDecode extends GraphicsActivity {
     31 
     32     @Override
     33     protected void onCreate(Bundle savedInstanceState) {
     34         super.onCreate(savedInstanceState);
     35         setContentView(new SampleView(this));
     36     }
     37 
     38     private static class SampleView extends View {
     39         private Bitmap mBitmap;
     40         private Bitmap mBitmap2;
     41         private Bitmap mBitmap3;
     42         private Bitmap mBitmap4;
     43         private Drawable mDrawable;
     44 
     45         private Movie mMovie;
     46         private long mMovieStart;
     47 
     48         //Set to false to use decodeByteArray
     49         private static final boolean DECODE_STREAM = true;
     50 
     51         private static byte[] streamToBytes(InputStream is) {
     52             ByteArrayOutputStream os = new ByteArrayOutputStream(1024);
     53             byte[] buffer = new byte[1024];
     54             int len;
     55             try {
     56                 while ((len = is.read(buffer)) >= 0) {
     57                     os.write(buffer, 0, len);
     58                 }
     59             } catch (java.io.IOException e) {
     60             }
     61             return os.toByteArray();
     62         }
     63 
     64         public SampleView(Context context) {
     65             super(context);
     66             setFocusable(true);
     67 
     68             java.io.InputStream is;
     69             is = context.getResources().openRawResource(R.drawable.beach);
     70 
     71             BitmapFactory.Options opts = new BitmapFactory.Options();
     72             Bitmap bm;
     73 
     74             opts.inJustDecodeBounds = true;
     75             bm = BitmapFactory.decodeStream(is, null, opts);
     76 
     77             // now opts.outWidth and opts.outHeight are the dimension of the
     78             // bitmap, even though bm is null
     79 
     80             opts.inJustDecodeBounds = false;    // this will request the bm
     81             opts.inSampleSize = 4;             // scaled down by 4
     82             bm = BitmapFactory.decodeStream(is, null, opts);
     83 
     84             mBitmap = bm;
     85 
     86             // decode an image with transparency
     87             is = context.getResources().openRawResource(R.drawable.frog);
     88             mBitmap2 = BitmapFactory.decodeStream(is);
     89 
     90             // create a deep copy of it using getPixels() into different configs
     91             int w = mBitmap2.getWidth();
     92             int h = mBitmap2.getHeight();
     93             int[] pixels = new int[w*h];
     94             mBitmap2.getPixels(pixels, 0, w, 0, 0, w, h);
     95             mBitmap3 = Bitmap.createBitmap(pixels, 0, w, w, h,
     96                                            Bitmap.Config.ARGB_8888);
     97             mBitmap4 = Bitmap.createBitmap(pixels, 0, w, w, h,
     98                                            Bitmap.Config.ARGB_4444);
     99 
    100             mDrawable = context.getResources().getDrawable(R.drawable.button);
    101             mDrawable.setBounds(150, 20, 300, 100);
    102 
    103             is = context.getResources().openRawResource(R.drawable.animated_gif);
    104 
    105             if (DECODE_STREAM) {
    106                 mMovie = Movie.decodeStream(is);
    107             } else {
    108                 byte[] array = streamToBytes(is);
    109                 mMovie = Movie.decodeByteArray(array, 0, array.length);
    110             }
    111         }
    112 
    113         @Override
    114         protected void onDraw(Canvas canvas) {
    115             canvas.drawColor(0xFFCCCCCC);
    116 
    117             Paint p = new Paint();
    118             p.setAntiAlias(true);
    119 
    120             canvas.drawBitmap(mBitmap, 10, 10, null);
    121             canvas.drawBitmap(mBitmap2, 10, 170, null);
    122             canvas.drawBitmap(mBitmap3, 110, 170, null);
    123             canvas.drawBitmap(mBitmap4, 210, 170, null);
    124 
    125             mDrawable.draw(canvas);
    126 
    127             long now = android.os.SystemClock.uptimeMillis();
    128             if (mMovieStart == 0) {   // first time
    129                 mMovieStart = now;
    130             }
    131             if (mMovie != null) {
    132                 int dur = mMovie.duration();
    133                 if (dur == 0) {
    134                     dur = 1000;
    135                 }
    136                 int relTime = (int)((now - mMovieStart) % dur);
    137                 mMovie.setTime(relTime);
    138                 mMovie.draw(canvas, getWidth() - mMovie.width(),
    139                             getHeight() - mMovie.height());
    140                 invalidate();
    141             }
    142         }
    143     }
    144 }
    145