diff options
Diffstat (limited to 'graphics/java/android')
-rw-r--r-- | graphics/java/android/graphics/BitmapFactory.java | 57 | ||||
-rw-r--r-- | graphics/java/android/graphics/PixelFormat.java | 19 | ||||
-rw-r--r-- | graphics/java/android/renderscript/Allocation.java | 5 |
3 files changed, 44 insertions, 37 deletions
diff --git a/graphics/java/android/graphics/BitmapFactory.java b/graphics/java/android/graphics/BitmapFactory.java index 4193dbb..23606a1 100644 --- a/graphics/java/android/graphics/BitmapFactory.java +++ b/graphics/java/android/graphics/BitmapFactory.java @@ -56,15 +56,26 @@ public class BitmapFactory { * mutable even when decoding a resource which would normally result in * an immutable bitmap.</p> * + * <p>You should still always use the returned Bitmap of the decode + * method and not assume that reusing the bitmap worked, due to the + * constraints outlined above and failure situations that can occur. + * Checking whether the return value matches the value of the inBitmap + * set in the Options structure will indicate if the bitmap was reused, + * but in all cases you should use the Bitmap returned by the decoding + * function to ensure that you are using the bitmap that was used as the + * decode destination.</p> + * + * <h3>Usage with BitmapFactory</h3> + * * <p>As of {@link android.os.Build.VERSION_CODES#KITKAT}, any - * mutable bitmap can be reused to decode any other bitmaps as long as - * the resulting {@link Bitmap#getByteCount() byte count} of the decoded - * bitmap is less than or equal to the {@link + * mutable bitmap can be reused by {@link BitmapFactory} to decode any + * other bitmaps as long as the resulting {@link Bitmap#getByteCount() + * byte count} of the decoded bitmap is less than or equal to the {@link * Bitmap#getAllocationByteCount() allocated byte count} of the reused * bitmap. This can be because the intrinsic size is smaller, or its * size post scaling (for density / sample size) is smaller.</p> * - * <p>Prior to {@link android.os.Build.VERSION_CODES#KITKAT} + * <p class="note">Prior to {@link android.os.Build.VERSION_CODES#KITKAT} * additional constraints apply: The image being decoded (whether as a * resource or as a stream) must be in jpeg or png format. Only equal * sized bitmaps are supported, with {@link #inSampleSize} set to 1. @@ -72,14 +83,17 @@ public class BitmapFactory { * configuration} of the reused bitmap will override the setting of * {@link #inPreferredConfig}, if set.</p> * - * <p>You should still always use the returned Bitmap of the decode - * method and not assume that reusing the bitmap worked, due to the - * constraints outlined above and failure situations that can occur. - * Checking whether the return value matches the value of the inBitmap - * set in the Options structure will indicate if the bitmap was reused, - * but in all cases you should use the Bitmap returned by the decoding - * function to ensure that you are using the bitmap that was used as the - * decode destination.</p> + * <h3>Usage with BitmapRegionDecoder</h3> + * + * <p>BitmapRegionDecoder will draw its requested content into the Bitmap + * provided, clipping if the output content size (post scaling) is larger + * than the provided Bitmap. The provided Bitmap's width, height, and + * {@link Bitmap.Config} will not be changed. + * + * <p class="note">BitmapRegionDecoder support for {@link #inBitmap} was + * introduced in {@link android.os.Build.VERSION_CODES#JELLY_BEAN}. All + * formats supported by BitmapRegionDecoder support Bitmap reuse via + * {@link #inBitmap}.</p> * * @see Bitmap#reconfigure(int,int, android.graphics.Bitmap.Config) */ @@ -229,6 +243,9 @@ public class BitmapFactory { * rather than relying on the graphics system scaling it each time it * is drawn to a Canvas. * + * <p>BitmapRegionDecoder ignores this flag, and will not scale output + * based on density. (though {@link #inSampleSize} is supported)</p> + * * <p>This flag is turned on by default and should be turned off if you need * a non-scaled version of the bitmap. Nine-patch bitmaps ignore this * flag and are always scaled. @@ -548,24 +565,10 @@ public class BitmapFactory { Trace.traceBegin(Trace.TRACE_TAG_GRAPHICS, "decodeBitmap"); try { - boolean decodeGenericStream = true; if (is instanceof AssetManager.AssetInputStream) { final int asset = ((AssetManager.AssetInputStream) is).getAssetInt(); bm = nativeDecodeAsset(asset, outPadding, opts); - // Do not follow the normal case. - decodeGenericStream = false; - } else if (is instanceof FileInputStream) { - try { - FileDescriptor fd = ((FileInputStream) is).getFD(); - // decodeFileDescriptor will take care of throwing the IAE and - // calling setDensityFromOptions. - return decodeFileDescriptor(fd, outPadding, opts); - } catch (IOException e) { - // Fall through to nativeDecodeStream. - } - } - - if (decodeGenericStream) { + } else { byte [] tempStorage = null; if (opts != null) tempStorage = opts.inTempStorage; if (tempStorage == null) tempStorage = new byte[DECODE_BUFFER_SIZE]; diff --git a/graphics/java/android/graphics/PixelFormat.java b/graphics/java/android/graphics/PixelFormat.java index 0230583..d96d6d8 100644 --- a/graphics/java/android/graphics/PixelFormat.java +++ b/graphics/java/android/graphics/PixelFormat.java @@ -19,16 +19,16 @@ package android.graphics; public class PixelFormat { /* these constants need to match those in hardware/hardware.h */ - + public static final int UNKNOWN = 0; /** System chooses a format that supports translucency (many alpha bits) */ public static final int TRANSLUCENT = -3; - /** + /** * System chooses a format that supports transparency - * (at least 1 alpha bit) - */ + * (at least 1 alpha bit) + */ public static final int TRANSPARENT = -2; /** System chooses an opaque format (no alpha bits required) */ @@ -54,28 +54,28 @@ public class PixelFormat /** - * @deprecated use {@link android.graphics.ImageFormat#NV16 + * @deprecated use {@link android.graphics.ImageFormat#NV16 * ImageFormat.NV16} instead. */ @Deprecated public static final int YCbCr_422_SP= 0x10; /** - * @deprecated use {@link android.graphics.ImageFormat#NV21 + * @deprecated use {@link android.graphics.ImageFormat#NV21 * ImageFormat.NV21} instead. */ @Deprecated public static final int YCbCr_420_SP= 0x11; /** - * @deprecated use {@link android.graphics.ImageFormat#YUY2 + * @deprecated use {@link android.graphics.ImageFormat#YUY2 * ImageFormat.YUY2} instead. */ @Deprecated public static final int YCbCr_422_I = 0x14; /** - * @deprecated use {@link android.graphics.ImageFormat#JPEG + * @deprecated use {@link android.graphics.ImageFormat#JPEG * ImageFormat.JPEG} instead. */ @Deprecated @@ -95,6 +95,7 @@ public class PixelFormat case RGB_565: case RGBA_5551: case RGBA_4444: + case LA_88: info.bitsPerPixel = 16; info.bytesPerPixel = 2; break; @@ -131,7 +132,7 @@ public class PixelFormat } return false; } - + public int bytesPerPixel; public int bitsPerPixel; } diff --git a/graphics/java/android/renderscript/Allocation.java b/graphics/java/android/renderscript/Allocation.java index ca72c25..dca934f 100644 --- a/graphics/java/android/renderscript/Allocation.java +++ b/graphics/java/android/renderscript/Allocation.java @@ -269,9 +269,12 @@ public class Allocation extends BaseObj { mType = t; mUsage = usage; - mSize = mType.getCount() * mType.getElement().getBytesSize(); if (t != null) { + // TODO: A3D doesn't have Type info during creation, so we can't + // calculate the size ahead of time. We can possibly add a method + // to update the size in the future if it seems reasonable. + mSize = mType.getCount() * mType.getElement().getBytesSize(); updateCacheInfo(t); } try { |