Merge "Rename ImageDecoder.setResize" into pi-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
6078631927
@@ -13644,7 +13644,6 @@ package android.graphics {
|
||||
method public android.graphics.ImageDecoder.OnPartialImageListener getOnPartialImageListener();
|
||||
method public android.graphics.PostProcessor getPostProcessor();
|
||||
method public boolean getRequireUnpremultiplied();
|
||||
method public android.util.Size getSampledSize(int);
|
||||
method public android.graphics.ImageDecoder setAllocator(int);
|
||||
method public android.graphics.ImageDecoder setConserveMemory(boolean);
|
||||
method public android.graphics.ImageDecoder setCrop(android.graphics.Rect);
|
||||
@@ -13653,8 +13652,8 @@ package android.graphics {
|
||||
method public android.graphics.ImageDecoder setOnPartialImageListener(android.graphics.ImageDecoder.OnPartialImageListener);
|
||||
method public android.graphics.ImageDecoder setPostProcessor(android.graphics.PostProcessor);
|
||||
method public android.graphics.ImageDecoder setRequireUnpremultiplied(boolean);
|
||||
method public android.graphics.ImageDecoder setResize(int, int);
|
||||
method public android.graphics.ImageDecoder setResize(int);
|
||||
method public android.graphics.ImageDecoder setSampleSize(int);
|
||||
method public android.graphics.ImageDecoder setTargetSize(int, int);
|
||||
field public static final int ALLOCATOR_DEFAULT = 0; // 0x0
|
||||
field public static final int ALLOCATOR_HARDWARE = 3; // 0x3
|
||||
field public static final int ALLOCATOR_SHARED_MEMORY = 2; // 0x2
|
||||
|
||||
@@ -184,6 +184,8 @@ package android.graphics {
|
||||
public final class ImageDecoder implements java.lang.AutoCloseable {
|
||||
method public deprecated boolean getAsAlphaMask();
|
||||
method public deprecated android.graphics.ImageDecoder setAsAlphaMask(boolean);
|
||||
method public deprecated android.graphics.ImageDecoder setResize(int, int);
|
||||
method public deprecated android.graphics.ImageDecoder setResize(int);
|
||||
field public static final deprecated int ERROR_SOURCE_ERROR = 3; // 0x3
|
||||
field public static final deprecated int ERROR_SOURCE_EXCEPTION = 1; // 0x1
|
||||
field public static final deprecated int ERROR_SOURCE_INCOMPLETE = 2; // 0x2
|
||||
|
||||
@@ -766,7 +766,7 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
*
|
||||
* <p>This takes an input that functions like
|
||||
* {@link BitmapFactory.Options#inSampleSize}. It returns a width and
|
||||
* height that can be acheived by sampling the encoded image. Other widths
|
||||
* height that can be achieved by sampling the encoded image. Other widths
|
||||
* and heights may be supported, but will require an additional (internal)
|
||||
* scaling step. Such internal scaling is *not* supported with
|
||||
* {@link #setRequireUnpremultiplied} set to {@code true}.</p>
|
||||
@@ -774,6 +774,8 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
* @param sampleSize Sampling rate of the encoded image.
|
||||
* @return {@link android.util.Size} of the width and height after
|
||||
* sampling.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@NonNull
|
||||
public Size getSampledSize(int sampleSize) {
|
||||
@@ -789,14 +791,28 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
}
|
||||
|
||||
// Modifiers
|
||||
/** @removed
|
||||
* @deprecated Renamed to {@link #setTargetSize}.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public ImageDecoder setResize(int width, int height) {
|
||||
return this.setTargetSize(width, height);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize the output to have the following size.
|
||||
* Specify the size of the output {@link Drawable} or {@link Bitmap}.
|
||||
*
|
||||
* <p>By default, the output size will match the size of the encoded
|
||||
* image, which can be retrieved from the {@link ImageInfo} in
|
||||
* {@link OnHeaderDecodedListener#onHeaderDecoded}.</p>
|
||||
*
|
||||
* <p>Only the last call to this or {@link #setSampleSize} is respected.</p>
|
||||
*
|
||||
* @param width must be greater than 0.
|
||||
* @param height must be greater than 0.
|
||||
* @return this object for chaining.
|
||||
*/
|
||||
public ImageDecoder setResize(int width, int height) {
|
||||
public ImageDecoder setTargetSize(int width, int height) {
|
||||
if (width <= 0 || height <= 0) {
|
||||
throw new IllegalArgumentException("Dimensions must be positive! "
|
||||
+ "provided (" + width + ", " + height + ")");
|
||||
@@ -807,18 +823,65 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/** @removed
|
||||
* @deprecated Renamed to {@link #setSampleSize}.
|
||||
*/
|
||||
@java.lang.Deprecated
|
||||
public ImageDecoder setResize(int sampleSize) {
|
||||
return this.setSampleSize(sampleSize);
|
||||
}
|
||||
|
||||
private int getTargetDimension(int original, int sampleSize, int computed) {
|
||||
// Sampling will never result in a smaller size than 1.
|
||||
if (sampleSize >= original) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Use integer divide to find the desired size. If that is what
|
||||
// getSampledSize computed, that is the size to use.
|
||||
int target = original / sampleSize;
|
||||
if (computed == target) {
|
||||
return computed;
|
||||
}
|
||||
|
||||
// If sampleSize does not divide evenly into original, the decoder
|
||||
// may round in either direction. It just needs to get a result that
|
||||
// is close.
|
||||
int reverse = computed * sampleSize;
|
||||
if (Math.abs(reverse - original) < sampleSize) {
|
||||
// This is the size that can be decoded most efficiently.
|
||||
return computed;
|
||||
}
|
||||
|
||||
// The decoder could not get close (e.g. it is a DNG image).
|
||||
return target;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resize based on a sample size.
|
||||
* Set the target size with a sampleSize.
|
||||
*
|
||||
* <p>This has the same effect as passing the result of
|
||||
* {@link #getSampledSize} to {@link #setResize(int, int)}.</p>
|
||||
* <p>By default, the output size will match the size of the encoded
|
||||
* image, which can be retrieved from the {@link ImageInfo} in
|
||||
* {@link OnHeaderDecodedListener#onHeaderDecoded}.</p>
|
||||
*
|
||||
* <p>Requests the decoder to subsample the original image, returning a
|
||||
* smaller image to save memory. The sample size is the number of pixels
|
||||
* in either dimension that correspond to a single pixel in the output.
|
||||
* For example, sampleSize == 4 returns an image that is 1/4 the
|
||||
* width/height of the original, and 1/16 the number of pixels.</p>
|
||||
*
|
||||
* <p>Must be greater than or equal to 1.</p>
|
||||
*
|
||||
* <p>Only the last call to this or {@link #setTargetSize} is respected.</p>
|
||||
*
|
||||
* @param sampleSize Sampling rate of the encoded image.
|
||||
* @return this object for chaining.
|
||||
*/
|
||||
public ImageDecoder setResize(int sampleSize) {
|
||||
public ImageDecoder setSampleSize(int sampleSize) {
|
||||
Size size = this.getSampledSize(sampleSize);
|
||||
return this.setResize(size.getWidth(), size.getHeight());
|
||||
int targetWidth = getTargetDimension(mWidth, sampleSize, size.getWidth());
|
||||
int targetHeight = getTargetDimension(mHeight, sampleSize, size.getHeight());
|
||||
return this.setTargetSize(targetWidth, targetHeight);
|
||||
}
|
||||
|
||||
private boolean requestedResize() {
|
||||
@@ -972,8 +1035,8 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
* Crop the output to {@code subset} of the (possibly) scaled image.
|
||||
*
|
||||
* <p>{@code subset} must be contained within the size set by
|
||||
* {@link #setResize} or the bounds of the image if setResize was not
|
||||
* called. Otherwise an {@link IllegalStateException} will be thrown by
|
||||
* {@link #setTargetSize} or the bounds of the image if setTargetSize was
|
||||
* not called. Otherwise an {@link IllegalStateException} will be thrown by
|
||||
* {@link #decodeDrawable}/{@link #decodeBitmap}.</p>
|
||||
*
|
||||
* <p>NOT intended as a replacement for
|
||||
@@ -1353,7 +1416,7 @@ public final class ImageDecoder implements AutoCloseable {
|
||||
float scale = (float) dstDensity / srcDensity;
|
||||
int scaledWidth = (int) (decoder.mWidth * scale + 0.5f);
|
||||
int scaledHeight = (int) (decoder.mHeight * scale + 0.5f);
|
||||
decoder.setResize(scaledWidth, scaledHeight);
|
||||
decoder.setTargetSize(scaledWidth, scaledHeight);
|
||||
return dstDensity;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user