| /* |
| * Copyright (C) 2014 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 androidx.core.graphics; |
| |
| import android.graphics.Bitmap; |
| import android.os.Build; |
| |
| import androidx.annotation.DoNotInline; |
| import androidx.annotation.NonNull; |
| import androidx.annotation.RequiresApi; |
| |
| /** |
| * Helper for accessing features in {@link Bitmap}. |
| */ |
| public final class BitmapCompat { |
| |
| /** |
| * Indicates whether the renderer responsible for drawing this |
| * bitmap should attempt to use mipmaps when this bitmap is drawn |
| * scaled down. |
| * <p> |
| * If you know that you are going to draw this bitmap at less than |
| * 50% of its original size, you may be able to obtain a higher |
| * quality |
| * <p> |
| * This property is only a suggestion that can be ignored by the |
| * renderer. It is not guaranteed to have any effect. |
| * |
| * @return true if the renderer should attempt to use mipmaps, |
| * false otherwise |
| * |
| * @see Bitmap#hasMipMap() |
| */ |
| public static boolean hasMipMap(@NonNull Bitmap bitmap) { |
| if (Build.VERSION.SDK_INT >= 17) { |
| return Api17Impl.hasMipMap(bitmap); |
| } |
| return false; |
| } |
| |
| /** |
| * Set a hint for the renderer responsible for drawing this bitmap |
| * indicating that it should attempt to use mipmaps when this bitmap |
| * is drawn scaled down. |
| * <p> |
| * If you know that you are going to draw this bitmap at less than |
| * 50% of its original size, you may be able to obtain a higher |
| * quality by turning this property on. |
| * <p> |
| * Note that if the renderer respects this hint it might have to |
| * allocate extra memory to hold the mipmap levels for this bitmap. |
| * <p> |
| * This property is only a suggestion that can be ignored by the |
| * renderer. It is not guaranteed to have any effect. |
| * |
| * @param hasMipMap indicates whether the renderer should attempt |
| * to use mipmaps |
| * |
| * @see Bitmap#setHasMipMap(boolean) |
| * |
| */ |
| public static void setHasMipMap(@NonNull Bitmap bitmap, boolean hasMipMap) { |
| if (Build.VERSION.SDK_INT >= 17) { |
| Api17Impl.setHasMipMap(bitmap, hasMipMap); |
| } |
| } |
| |
| /** |
| * Returns the size of the allocated memory used to store this bitmap's pixels. |
| * <p> |
| * This value will not change over the lifetime of a Bitmap. |
| * |
| * @see Bitmap#getAllocationByteCount() |
| */ |
| public static int getAllocationByteCount(@NonNull Bitmap bitmap) { |
| if (Build.VERSION.SDK_INT >= 19) { |
| return Api19Impl.getAllocationByteCount(bitmap); |
| } |
| return bitmap.getByteCount(); |
| } |
| |
| private BitmapCompat() { |
| // This class is not instantiable. |
| } |
| |
| @RequiresApi(17) |
| static class Api17Impl { |
| private Api17Impl() { |
| // This class is not instantiable. |
| } |
| |
| @DoNotInline |
| static boolean hasMipMap(Bitmap bitmap) { |
| return bitmap.hasMipMap(); |
| } |
| |
| @DoNotInline |
| static void setHasMipMap(Bitmap bitmap, boolean hasMipMap) { |
| bitmap.setHasMipMap(hasMipMap); |
| } |
| } |
| |
| @RequiresApi(19) |
| static class Api19Impl { |
| private Api19Impl() { |
| // This class is not instantiable. |
| } |
| |
| @DoNotInline |
| static int getAllocationByteCount(Bitmap bitmap) { |
| return bitmap.getAllocationByteCount(); |
| } |
| } |
| } |