diff options
author | Owen Lin <owenlin@google.com> | 2011-08-17 22:07:43 +0800 |
---|---|---|
committer | Owen Lin <owenlin@google.com> | 2011-08-18 13:33:50 +0800 |
commit | f9a0a4306d589b4a4e20554fed512a603426bfa1 (patch) | |
tree | df0d55b351d5addf3c4149ce942292593b30d700 /src/com/android/gallery3d/ui/BitmapTileProvider.java | |
parent | a053a3179cfee3d2bb666eff5f4f03a96b092e04 (diff) | |
download | android_packages_apps_Gallery2-f9a0a4306d589b4a4e20554fed512a603426bfa1.tar.gz android_packages_apps_Gallery2-f9a0a4306d589b4a4e20554fed512a603426bfa1.tar.bz2 android_packages_apps_Gallery2-f9a0a4306d589b4a4e20554fed512a603426bfa1.zip |
Initial code for Gallery2.
fix: 5176434
Change-Id: I041e282b9c7b34ceb1db8b033be2b853bb3a992c
Diffstat (limited to 'src/com/android/gallery3d/ui/BitmapTileProvider.java')
-rw-r--r-- | src/com/android/gallery3d/ui/BitmapTileProvider.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/com/android/gallery3d/ui/BitmapTileProvider.java b/src/com/android/gallery3d/ui/BitmapTileProvider.java new file mode 100644 index 000000000..a47337fa2 --- /dev/null +++ b/src/com/android/gallery3d/ui/BitmapTileProvider.java @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.gallery3d.ui; + +import com.android.gallery3d.common.BitmapUtils; + +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Bitmap.Config; + +import java.util.ArrayList; + +public class BitmapTileProvider implements TileImageView.Model { + private final Bitmap mBackup; + private final Bitmap[] mMipmaps; + private final Config mConfig; + private final int mImageWidth; + private final int mImageHeight; + + private boolean mRecycled = false; + + public BitmapTileProvider(Bitmap bitmap, int maxBackupSize) { + mImageWidth = bitmap.getWidth(); + mImageHeight = bitmap.getHeight(); + ArrayList<Bitmap> list = new ArrayList<Bitmap>(); + list.add(bitmap); + while (bitmap.getWidth() > maxBackupSize + || bitmap.getHeight() > maxBackupSize) { + bitmap = BitmapUtils.resizeBitmapByScale(bitmap, 0.5f, false); + list.add(bitmap); + } + + mBackup = list.remove(list.size() - 1); + mMipmaps = list.toArray(new Bitmap[list.size()]); + mConfig = Config.ARGB_8888; + } + + public Bitmap getBackupImage() { + return mBackup; + } + + public int getImageHeight() { + return mImageHeight; + } + + public int getImageWidth() { + return mImageWidth; + } + + public int getLevelCount() { + return mMipmaps.length; + } + + public Bitmap getTile(int level, int x, int y, int tileSize) { + Bitmap result = Bitmap.createBitmap(tileSize, tileSize, mConfig); + Canvas canvas = new Canvas(result); + canvas.drawBitmap(mMipmaps[level], -(x >> level), -(y >> level), null); + return result; + } + + public void recycle() { + if (mRecycled) return; + mRecycled = true; + for (Bitmap bitmap : mMipmaps) { + BitmapUtils.recycleSilently(bitmap); + } + BitmapUtils.recycleSilently(mBackup); + } + + public int getRotation() { + return 0; + } + + public boolean isFailedToLoad() { + return false; + } +} |