Loading api/current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -11769,6 +11769,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -11833,6 +11835,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12192,6 +12195,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -12727,7 +12731,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -61421,31 +61427,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray(); api/system-current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -12262,6 +12262,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -12326,6 +12328,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12685,6 +12688,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -13220,7 +13224,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -64944,31 +64950,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray(); api/test-current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -11800,6 +11800,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -11864,6 +11866,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12223,6 +12226,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -12758,7 +12762,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -61731,31 +61737,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray(); core/jni/android/graphics/Bitmap.cpp +70 −7 Original line number Original line Diff line number Diff line Loading @@ -5,7 +5,11 @@ #include "SkPixelRef.h" #include "SkPixelRef.h" #include "SkImageEncoder.h" #include "SkImageEncoder.h" #include "SkImageInfo.h" #include "SkImageInfo.h" #include "SkColor.h" #include "SkColorPriv.h" #include "SkColorPriv.h" #include "SkHalf.h" #include "SkPM4f.h" #include "SkPM4fPriv.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "SkDither.h" #include "SkDither.h" #include "SkUnPreMultiply.h" #include "SkUnPreMultiply.h" Loading Loading @@ -232,6 +236,28 @@ using namespace android::bitmap; typedef void (*FromColorProc)(void* dst, const SkColor src[], int width, typedef void (*FromColorProc)(void* dst, const SkColor src[], int width, int x, int y); int x, int y); static void FromColor_F16(void* dst, const SkColor src[], int width, int, int) { uint64_t* d = (uint64_t*)dst; for (int i = 0; i < width; i++) { *d++ = SkColor4f::FromColor(*src++).premul().toF16(); } } static void FromColor_F16_Raw(void* dst, const SkColor src[], int width, int, int) { uint64_t* d = (uint64_t*)dst; for (int i = 0; i < width; i++) { const float* color = SkColor4f::FromColor(*src++).vec(); uint16_t* scratch = reinterpret_cast<uint16_t*>(d++); for (int i = 0; i < 4; ++i) { scratch[i] = SkFloatToHalf(color[i]); } } } static void FromColor_D32(void* dst, const SkColor src[], int width, static void FromColor_D32(void* dst, const SkColor src[], int width, int, int) { int, int) { SkPMColor* d = (SkPMColor*)dst; SkPMColor* d = (SkPMColor*)dst; Loading Loading @@ -321,6 +347,8 @@ static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) { return FromColor_D565; return FromColor_D565; case kAlpha_8_SkColorType: case kAlpha_8_SkColorType: return FromColor_DA8; return FromColor_DA8; case kRGBA_F16_SkColorType: return bitmap.alphaType() == kPremul_SkAlphaType ? FromColor_F16 : FromColor_F16_Raw; default: default: break; break; } } Loading Loading @@ -351,8 +379,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int dstBitmap.notifyPixelsChanged(); dstBitmap.notifyPixelsChanged(); env->ReleaseIntArrayElements(srcColors, const_cast<jint*>(array), env->ReleaseIntArrayElements(srcColors, const_cast<jint*>(array), JNI_ABORT); JNI_ABORT); return true; return true; } } Loading @@ -361,6 +388,24 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int typedef void (*ToColorProc)(SkColor dst[], const void* src, int width, typedef void (*ToColorProc)(SkColor dst[], const void* src, int width, SkColorTable*); SkColorTable*); static void ToColor_F16_Alpha(SkColor dst[], const void* src, int width, SkColorTable*) { SkASSERT(width > 0); uint64_t* s = (uint64_t*)src; do { *dst++ = SkPM4f::FromF16((const uint16_t*) s++).unpremul().toSkColor(); } while (--width != 0); } static void ToColor_F16_Raw(SkColor dst[], const void* src, int width, SkColorTable*) { SkASSERT(width > 0); uint64_t* s = (uint64_t*)src; do { *dst++ = Sk4f_toS32(swizzle_rb(SkHalfToFloat_finite_ftz(*s++))); } while (--width != 0); } static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width, static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width, SkColorTable*) { SkColorTable*) { SkASSERT(width > 0); SkASSERT(width > 0); Loading Loading @@ -520,6 +565,17 @@ static ToColorProc ChooseToColorProc(const SkBitmap& src) { } } case kAlpha_8_SkColorType: case kAlpha_8_SkColorType: return ToColor_SA8; return ToColor_SA8; case kRGBA_F16_SkColorType: switch (src.alphaType()) { case kOpaque_SkAlphaType: return ToColor_F16_Raw; case kPremul_SkAlphaType: return ToColor_F16_Alpha; case kUnpremul_SkAlphaType: return ToColor_F16_Raw; default: return NULL; } default: default: break; break; } } Loading Loading @@ -554,7 +610,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, SkBitmap bitmap; SkBitmap bitmap; bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType, bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType, GraphicsJNI::defaultColorSpace())); GraphicsJNI::colorSpaceForType(colorType))); sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL); sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL); if (!nativeBitmap) { if (!nativeBitmap) { Loading @@ -562,8 +618,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, } } if (jColors != NULL) { if (jColors != NULL) { GraphicsJNI::SetPixels(env, jColors, offset, stride, GraphicsJNI::SetPixels(env, jColors, offset, stride, 0, 0, width, height, bitmap); 0, 0, width, height, bitmap); } } return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable)); return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable)); Loading Loading @@ -790,6 +845,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { const int density = p->readInt32(); const int density = p->readInt32(); if (kN32_SkColorType != colorType && if (kN32_SkColorType != colorType && kRGBA_F16_SkColorType != colorType && kRGB_565_SkColorType != colorType && kRGB_565_SkColorType != colorType && kARGB_4444_SkColorType != colorType && kARGB_4444_SkColorType != colorType && kIndex_8_SkColorType != colorType && kIndex_8_SkColorType != colorType && Loading @@ -800,8 +856,15 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { std::unique_ptr<SkBitmap> bitmap(new SkBitmap); std::unique_ptr<SkBitmap> bitmap(new SkBitmap); if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType, sk_sp<SkColorSpace> colorSpace; isSRGB ? SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named) : nullptr), rowBytes)) { if (kRGBA_F16_SkColorType == colorType) { colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named); } else { colorSpace = isSRGB ? SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named) : nullptr; } if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType, colorSpace), rowBytes)) { return NULL; return NULL; } } Loading core/jni/android/graphics/BitmapFactory.cpp +4 −3 Original line number Original line Diff line number Diff line Loading @@ -283,8 +283,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // Create the codec. // Create the codec. NinePatchPeeker peeker; NinePatchPeeker peeker; std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(streamDeleter.release(), std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream( &peeker)); streamDeleter.release(), &peeker)); if (!codec.get()) { if (!codec.get()) { return nullObjectReturn("SkAndroidCodec::NewFromStream returned null"); return nullObjectReturn("SkAndroidCodec::NewFromStream returned null"); } } Loading Loading @@ -399,7 +399,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // We always decode to sRGB, but only mark the bitmap with a color space if linear // We always decode to sRGB, but only mark the bitmap with a color space if linear // blending is enabled. // blending is enabled. SkImageInfo bitmapInfo = decodeInfo.makeColorSpace(GraphicsJNI::defaultColorSpace()); SkImageInfo bitmapInfo = decodeInfo.makeColorSpace( GraphicsJNI::colorSpaceForType(decodeColorType)); if (decodeColorType == kGray_8_SkColorType) { if (decodeColorType == kGray_8_SkColorType) { // The legacy implementation of BitmapFactory used kAlpha8 for // The legacy implementation of BitmapFactory used kAlpha8 for // grayscale images (before kGray8 existed). While the codec // grayscale images (before kGray8 existed). While the codec Loading Loading
api/current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -11769,6 +11769,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -11833,6 +11835,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12192,6 +12195,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -12727,7 +12731,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -61421,31 +61427,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray();
api/system-current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -12262,6 +12262,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -12326,6 +12328,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12685,6 +12688,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -13220,7 +13224,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -64944,31 +64950,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray();
api/test-current.txt +21 −15 Original line number Original line Diff line number Diff line Loading @@ -11800,6 +11800,8 @@ package android.graphics { method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(android.graphics.Bitmap, int, int, int, int, android.graphics.Matrix, boolean); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int, int, android.graphics.Bitmap.Config, boolean); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(android.util.DisplayMetrics, int[], int, int, int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); method public static android.graphics.Bitmap createBitmap(int[], int, int, android.graphics.Bitmap.Config); Loading Loading @@ -11864,6 +11866,7 @@ package android.graphics { enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final deprecated android.graphics.Bitmap.Config ARGB_4444; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config ARGB_8888; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config HARDWARE; enum_constant public static final android.graphics.Bitmap.Config RGBA_F16; enum_constant public static final android.graphics.Bitmap.Config RGB_565; enum_constant public static final android.graphics.Bitmap.Config RGB_565; } } Loading Loading @@ -12223,6 +12226,7 @@ package android.graphics { method public android.graphics.Bitmap render(); method public android.graphics.Bitmap render(); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer showWhitePoint(boolean); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer size(int); method public android.graphics.ColorSpace.Renderer uniformChromaticityScale(boolean); } } public static class ColorSpace.Rgb extends android.graphics.ColorSpace { public static class ColorSpace.Rgb extends android.graphics.ColorSpace { Loading Loading @@ -12758,7 +12762,9 @@ package android.graphics { field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_4444 = 7; // 0x7 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final deprecated int RGBA_5551 = 6; // 0x6 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_8888 = 1; // 0x1 field public static final int RGBA_F16 = 22; // 0x16 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_8888 = 2; // 0x2 field public static final int RGBX_F16 = 23; // 0x17 field public static final deprecated int RGB_332 = 11; // 0xb field public static final deprecated int RGB_332 = 11; // 0xb field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_565 = 4; // 0x4 field public static final int RGB_888 = 3; // 0x3 field public static final int RGB_888 = 3; // 0x3 Loading Loading @@ -61731,31 +61737,31 @@ package java.util.concurrent { ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(java.util.Collection<? extends E>); ctor public CopyOnWriteArrayList(E[]); ctor public CopyOnWriteArrayList(E[]); method public synchronized boolean add(E); method public boolean add(E); method public synchronized void add(int, E); method public void add(int, E); method public synchronized boolean addAll(java.util.Collection<? extends E>); method public boolean addAll(java.util.Collection<? extends E>); method public synchronized boolean addAll(int, java.util.Collection<? extends E>); method public boolean addAll(int, java.util.Collection<? extends E>); method public synchronized int addAllAbsent(java.util.Collection<? extends E>); method public int addAllAbsent(java.util.Collection<? extends E>); method public synchronized boolean addIfAbsent(E); method public boolean addIfAbsent(E); method public synchronized void clear(); method public void clear(); method public java.lang.Object clone(); method public java.lang.Object clone(); method public boolean contains(java.lang.Object); method public boolean contains(java.lang.Object); method public boolean containsAll(java.util.Collection<?>); method public boolean containsAll(java.util.Collection<?>); method public void forEach(java.util.function.Consumer<? super E>); method public void forEach(java.util.function.Consumer<? super E>); method public E get(int); method public E get(int); method public int indexOf(E, int); method public int indexOf(java.lang.Object); method public int indexOf(java.lang.Object); method public int indexOf(E, int); method public boolean isEmpty(); method public boolean isEmpty(); method public java.util.Iterator<E> iterator(); method public java.util.Iterator<E> iterator(); method public int lastIndexOf(E, int); method public int lastIndexOf(java.lang.Object); method public int lastIndexOf(java.lang.Object); method public java.util.ListIterator<E> listIterator(int); method public int lastIndexOf(E, int); method public java.util.ListIterator<E> listIterator(); method public java.util.ListIterator<E> listIterator(); method public synchronized E remove(int); method public java.util.ListIterator<E> listIterator(int); method public synchronized boolean remove(java.lang.Object); method public E remove(int); method public synchronized boolean removeAll(java.util.Collection<?>); method public boolean remove(java.lang.Object); method public synchronized boolean retainAll(java.util.Collection<?>); method public boolean removeAll(java.util.Collection<?>); method public synchronized E set(int, E); method public boolean retainAll(java.util.Collection<?>); method public E set(int, E); method public int size(); method public int size(); method public java.util.List<E> subList(int, int); method public java.util.List<E> subList(int, int); method public java.lang.Object[] toArray(); method public java.lang.Object[] toArray();
core/jni/android/graphics/Bitmap.cpp +70 −7 Original line number Original line Diff line number Diff line Loading @@ -5,7 +5,11 @@ #include "SkPixelRef.h" #include "SkPixelRef.h" #include "SkImageEncoder.h" #include "SkImageEncoder.h" #include "SkImageInfo.h" #include "SkImageInfo.h" #include "SkColor.h" #include "SkColorPriv.h" #include "SkColorPriv.h" #include "SkHalf.h" #include "SkPM4f.h" #include "SkPM4fPriv.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "SkDither.h" #include "SkDither.h" #include "SkUnPreMultiply.h" #include "SkUnPreMultiply.h" Loading Loading @@ -232,6 +236,28 @@ using namespace android::bitmap; typedef void (*FromColorProc)(void* dst, const SkColor src[], int width, typedef void (*FromColorProc)(void* dst, const SkColor src[], int width, int x, int y); int x, int y); static void FromColor_F16(void* dst, const SkColor src[], int width, int, int) { uint64_t* d = (uint64_t*)dst; for (int i = 0; i < width; i++) { *d++ = SkColor4f::FromColor(*src++).premul().toF16(); } } static void FromColor_F16_Raw(void* dst, const SkColor src[], int width, int, int) { uint64_t* d = (uint64_t*)dst; for (int i = 0; i < width; i++) { const float* color = SkColor4f::FromColor(*src++).vec(); uint16_t* scratch = reinterpret_cast<uint16_t*>(d++); for (int i = 0; i < 4; ++i) { scratch[i] = SkFloatToHalf(color[i]); } } } static void FromColor_D32(void* dst, const SkColor src[], int width, static void FromColor_D32(void* dst, const SkColor src[], int width, int, int) { int, int) { SkPMColor* d = (SkPMColor*)dst; SkPMColor* d = (SkPMColor*)dst; Loading Loading @@ -321,6 +347,8 @@ static FromColorProc ChooseFromColorProc(const SkBitmap& bitmap) { return FromColor_D565; return FromColor_D565; case kAlpha_8_SkColorType: case kAlpha_8_SkColorType: return FromColor_DA8; return FromColor_DA8; case kRGBA_F16_SkColorType: return bitmap.alphaType() == kPremul_SkAlphaType ? FromColor_F16 : FromColor_F16_Raw; default: default: break; break; } } Loading Loading @@ -351,8 +379,7 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int dstBitmap.notifyPixelsChanged(); dstBitmap.notifyPixelsChanged(); env->ReleaseIntArrayElements(srcColors, const_cast<jint*>(array), env->ReleaseIntArrayElements(srcColors, const_cast<jint*>(array), JNI_ABORT); JNI_ABORT); return true; return true; } } Loading @@ -361,6 +388,24 @@ bool GraphicsJNI::SetPixels(JNIEnv* env, jintArray srcColors, int srcOffset, int typedef void (*ToColorProc)(SkColor dst[], const void* src, int width, typedef void (*ToColorProc)(SkColor dst[], const void* src, int width, SkColorTable*); SkColorTable*); static void ToColor_F16_Alpha(SkColor dst[], const void* src, int width, SkColorTable*) { SkASSERT(width > 0); uint64_t* s = (uint64_t*)src; do { *dst++ = SkPM4f::FromF16((const uint16_t*) s++).unpremul().toSkColor(); } while (--width != 0); } static void ToColor_F16_Raw(SkColor dst[], const void* src, int width, SkColorTable*) { SkASSERT(width > 0); uint64_t* s = (uint64_t*)src; do { *dst++ = Sk4f_toS32(swizzle_rb(SkHalfToFloat_finite_ftz(*s++))); } while (--width != 0); } static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width, static void ToColor_S32_Alpha(SkColor dst[], const void* src, int width, SkColorTable*) { SkColorTable*) { SkASSERT(width > 0); SkASSERT(width > 0); Loading Loading @@ -520,6 +565,17 @@ static ToColorProc ChooseToColorProc(const SkBitmap& src) { } } case kAlpha_8_SkColorType: case kAlpha_8_SkColorType: return ToColor_SA8; return ToColor_SA8; case kRGBA_F16_SkColorType: switch (src.alphaType()) { case kOpaque_SkAlphaType: return ToColor_F16_Raw; case kPremul_SkAlphaType: return ToColor_F16_Alpha; case kUnpremul_SkAlphaType: return ToColor_F16_Raw; default: return NULL; } default: default: break; break; } } Loading Loading @@ -554,7 +610,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, SkBitmap bitmap; SkBitmap bitmap; bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType, bitmap.setInfo(SkImageInfo::Make(width, height, colorType, kPremul_SkAlphaType, GraphicsJNI::defaultColorSpace())); GraphicsJNI::colorSpaceForType(colorType))); sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL); sk_sp<Bitmap> nativeBitmap = Bitmap::allocateHeapBitmap(&bitmap, NULL); if (!nativeBitmap) { if (!nativeBitmap) { Loading @@ -562,8 +618,7 @@ static jobject Bitmap_creator(JNIEnv* env, jobject, jintArray jColors, } } if (jColors != NULL) { if (jColors != NULL) { GraphicsJNI::SetPixels(env, jColors, offset, stride, GraphicsJNI::SetPixels(env, jColors, offset, stride, 0, 0, width, height, bitmap); 0, 0, width, height, bitmap); } } return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable)); return createBitmap(env, nativeBitmap.release(), getPremulBitmapCreateFlags(isMutable)); Loading Loading @@ -790,6 +845,7 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { const int density = p->readInt32(); const int density = p->readInt32(); if (kN32_SkColorType != colorType && if (kN32_SkColorType != colorType && kRGBA_F16_SkColorType != colorType && kRGB_565_SkColorType != colorType && kRGB_565_SkColorType != colorType && kARGB_4444_SkColorType != colorType && kARGB_4444_SkColorType != colorType && kIndex_8_SkColorType != colorType && kIndex_8_SkColorType != colorType && Loading @@ -800,8 +856,15 @@ static jobject Bitmap_createFromParcel(JNIEnv* env, jobject, jobject parcel) { std::unique_ptr<SkBitmap> bitmap(new SkBitmap); std::unique_ptr<SkBitmap> bitmap(new SkBitmap); if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType, sk_sp<SkColorSpace> colorSpace; isSRGB ? SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named) : nullptr), rowBytes)) { if (kRGBA_F16_SkColorType == colorType) { colorSpace = SkColorSpace::MakeNamed(SkColorSpace::kSRGBLinear_Named); } else { colorSpace = isSRGB ? SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named) : nullptr; } if (!bitmap->setInfo(SkImageInfo::Make(width, height, colorType, alphaType, colorSpace), rowBytes)) { return NULL; return NULL; } } Loading
core/jni/android/graphics/BitmapFactory.cpp +4 −3 Original line number Original line Diff line number Diff line Loading @@ -283,8 +283,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // Create the codec. // Create the codec. NinePatchPeeker peeker; NinePatchPeeker peeker; std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream(streamDeleter.release(), std::unique_ptr<SkAndroidCodec> codec(SkAndroidCodec::NewFromStream( &peeker)); streamDeleter.release(), &peeker)); if (!codec.get()) { if (!codec.get()) { return nullObjectReturn("SkAndroidCodec::NewFromStream returned null"); return nullObjectReturn("SkAndroidCodec::NewFromStream returned null"); } } Loading Loading @@ -399,7 +399,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // We always decode to sRGB, but only mark the bitmap with a color space if linear // We always decode to sRGB, but only mark the bitmap with a color space if linear // blending is enabled. // blending is enabled. SkImageInfo bitmapInfo = decodeInfo.makeColorSpace(GraphicsJNI::defaultColorSpace()); SkImageInfo bitmapInfo = decodeInfo.makeColorSpace( GraphicsJNI::colorSpaceForType(decodeColorType)); if (decodeColorType == kGray_8_SkColorType) { if (decodeColorType == kGray_8_SkColorType) { // The legacy implementation of BitmapFactory used kAlpha8 for // The legacy implementation of BitmapFactory used kAlpha8 for // grayscale images (before kGray8 existed). While the codec // grayscale images (before kGray8 existed). While the codec Loading