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
onCreate(Bundle savedInstanceState)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 
streamToBytes(InputStream is)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 
SampleView(Context context)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
onDraw(Canvas canvas)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