Loading core/jni/android/graphics/Bitmap.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,14 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle, jint dstConfigHandle, jboolean isMutable) { SkBitmap src; reinterpret_cast<BitmapWrapper*>(srcHandle)->getSkBitmap(&src); if (dstConfigHandle == GraphicsJNI::hardwareLegacyBitmapConfig()) { sk_sp<Bitmap> bitmap(Bitmap::allocateHardwareBitmap(src)); if (!bitmap.get()) { return NULL; } return createBitmap(env, bitmap.release(), kBitmapCreateFlag_None); } SkColorType dstCT = GraphicsJNI::legacyBitmapConfigToColorType(dstConfigHandle); SkBitmap result; HeapAllocator allocator; Loading graphics/java/android/graphics/Bitmap.java +4 −0 Original line number Diff line number Diff line Loading @@ -592,9 +592,13 @@ public final class Bitmap implements Parcelable { * @param isMutable True if the resulting bitmap should be mutable (i.e. * its pixels can be modified) * @return the new bitmap, or null if the copy could not be made. * @throws IllegalArgumentException if config is {@link Config#HARDWARE} and isMutable is true */ public Bitmap copy(Config config, boolean isMutable) { checkRecycled("Can't copy a recycled bitmap"); if (config == Config.HARDWARE && isMutable) { throw new IllegalArgumentException("Hardware bitmaps are always immutable"); } Bitmap b = nativeCopy(mNativePtr, config.nativeInt, isMutable); if (b != null) { b.setPremultiplied(mRequestPremultiplied); Loading libs/hwui/hwui/Bitmap.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -98,8 +98,6 @@ static sk_sp<Bitmap> allocateHeapBitmap(size_t size, const SkImageInfo& info, si // TODO: handle SRGB sanely static PixelFormat internalFormatToPixelFormat(GLint internalFormat) { switch (internalFormat) { case GL_ALPHA: return PIXEL_FORMAT_TRANSPARENT; case GL_LUMINANCE: return PIXEL_FORMAT_RGBA_8888; case GL_SRGB8_ALPHA8: Loading Loading @@ -217,8 +215,8 @@ sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(uirenderer::renderthread::RenderThr } const SkImageInfo& info = skBitmap.info(); if (info.colorType() == kUnknown_SkColorType) { ALOGW("unable to create hardware bitmap of configuration"); if (info.colorType() == kUnknown_SkColorType || info.colorType() == kAlpha_8_SkColorType) { ALOGW("unable to create hardware bitmap of colortype: %d", info.colorType()); return nullptr; } Loading Loading @@ -251,7 +249,7 @@ sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(uirenderer::renderthread::RenderThr if (!uploadBitmapToGraphicBuffer(caches, bitmap, *buffer, format, type)) { return nullptr; } return sk_sp<Bitmap>(new Bitmap(buffer.get(), info)); return sk_sp<Bitmap>(new Bitmap(buffer.get(), bitmap.info())); } sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(SkBitmap& bitmap) { Loading Loading @@ -313,7 +311,8 @@ sk_sp<Bitmap> Bitmap::createFrom(sp<GraphicBuffer> graphicBuffer) { return nullptr; } SkImageInfo info = SkImageInfo::Make(graphicBuffer->getWidth(), graphicBuffer->getHeight(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); kRGBA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named)); return sk_sp<Bitmap>(new Bitmap(graphicBuffer.get(), info)); } Loading Loading
core/jni/android/graphics/Bitmap.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -628,6 +628,14 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle, jint dstConfigHandle, jboolean isMutable) { SkBitmap src; reinterpret_cast<BitmapWrapper*>(srcHandle)->getSkBitmap(&src); if (dstConfigHandle == GraphicsJNI::hardwareLegacyBitmapConfig()) { sk_sp<Bitmap> bitmap(Bitmap::allocateHardwareBitmap(src)); if (!bitmap.get()) { return NULL; } return createBitmap(env, bitmap.release(), kBitmapCreateFlag_None); } SkColorType dstCT = GraphicsJNI::legacyBitmapConfigToColorType(dstConfigHandle); SkBitmap result; HeapAllocator allocator; Loading
graphics/java/android/graphics/Bitmap.java +4 −0 Original line number Diff line number Diff line Loading @@ -592,9 +592,13 @@ public final class Bitmap implements Parcelable { * @param isMutable True if the resulting bitmap should be mutable (i.e. * its pixels can be modified) * @return the new bitmap, or null if the copy could not be made. * @throws IllegalArgumentException if config is {@link Config#HARDWARE} and isMutable is true */ public Bitmap copy(Config config, boolean isMutable) { checkRecycled("Can't copy a recycled bitmap"); if (config == Config.HARDWARE && isMutable) { throw new IllegalArgumentException("Hardware bitmaps are always immutable"); } Bitmap b = nativeCopy(mNativePtr, config.nativeInt, isMutable); if (b != null) { b.setPremultiplied(mRequestPremultiplied); Loading
libs/hwui/hwui/Bitmap.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -98,8 +98,6 @@ static sk_sp<Bitmap> allocateHeapBitmap(size_t size, const SkImageInfo& info, si // TODO: handle SRGB sanely static PixelFormat internalFormatToPixelFormat(GLint internalFormat) { switch (internalFormat) { case GL_ALPHA: return PIXEL_FORMAT_TRANSPARENT; case GL_LUMINANCE: return PIXEL_FORMAT_RGBA_8888; case GL_SRGB8_ALPHA8: Loading Loading @@ -217,8 +215,8 @@ sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(uirenderer::renderthread::RenderThr } const SkImageInfo& info = skBitmap.info(); if (info.colorType() == kUnknown_SkColorType) { ALOGW("unable to create hardware bitmap of configuration"); if (info.colorType() == kUnknown_SkColorType || info.colorType() == kAlpha_8_SkColorType) { ALOGW("unable to create hardware bitmap of colortype: %d", info.colorType()); return nullptr; } Loading Loading @@ -251,7 +249,7 @@ sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(uirenderer::renderthread::RenderThr if (!uploadBitmapToGraphicBuffer(caches, bitmap, *buffer, format, type)) { return nullptr; } return sk_sp<Bitmap>(new Bitmap(buffer.get(), info)); return sk_sp<Bitmap>(new Bitmap(buffer.get(), bitmap.info())); } sk_sp<Bitmap> Bitmap::allocateHardwareBitmap(SkBitmap& bitmap) { Loading Loading @@ -313,7 +311,8 @@ sk_sp<Bitmap> Bitmap::createFrom(sp<GraphicBuffer> graphicBuffer) { return nullptr; } SkImageInfo info = SkImageInfo::Make(graphicBuffer->getWidth(), graphicBuffer->getHeight(), kRGBA_8888_SkColorType, kPremul_SkAlphaType); kRGBA_8888_SkColorType, kPremul_SkAlphaType, SkColorSpace::MakeNamed(SkColorSpace::kSRGB_Named)); return sk_sp<Bitmap>(new Bitmap(graphicBuffer.get(), info)); } Loading