Loading cmds/screencap/screencap.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -175,13 +175,20 @@ int main(int argc, char** argv) if (base != NULL) { if (png) { const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType); sk_sp<SkData> data(SkImageEncoder::EncodeData(info, base, s*bytesPerPixel(f), SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality)); if (data.get()) { write(fd, data->data(), data->size()); } const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType); SkPixmap pixmap(info, base, s * bytesPerPixel(f)); struct FDWStream final : public SkWStream { size_t fBytesWritten = 0; int fFd; FDWStream(int f) : fFd(f) {} size_t bytesWritten() const override { return fBytesWritten; } bool write(const void* buffer, size_t size) override { fBytesWritten += size; return size == 0 || ::write(fFd, buffer, size) > 0; } } fdStream(fd); (void)SkEncodeImage(&fdStream, pixmap, SkEncodedImageFormat::kPNG, 100); if (fn != NULL) { notifyMediaScanner(fn); } Loading core/jni/android/graphics/Bitmap.cpp +8 −16 Original line number Diff line number Diff line Loading @@ -668,42 +668,34 @@ enum JavaEncodeFormat { static jboolean Bitmap_compress(JNIEnv* env, jobject clazz, jlong bitmapHandle, jint format, jint quality, jobject jstream, jbyteArray jstorage) { LocalScopedBitmap bitmap(bitmapHandle); SkImageEncoder::Type fm; SkEncodedImageFormat fm; switch (format) { case kJPEG_JavaEncodeFormat: fm = SkImageEncoder::kJPEG_Type; fm = SkEncodedImageFormat::kJPEG; break; case kPNG_JavaEncodeFormat: fm = SkImageEncoder::kPNG_Type; fm = SkEncodedImageFormat::kPNG; break; case kWEBP_JavaEncodeFormat: fm = SkImageEncoder::kWEBP_Type; fm = SkEncodedImageFormat::kWEBP; break; default: return JNI_FALSE; } LocalScopedBitmap bitmap(bitmapHandle); if (!bitmap.valid()) { return JNI_FALSE; } bool success = false; std::unique_ptr<SkWStream> strm(CreateJavaOutputStreamAdaptor(env, jstream, jstorage)); if (!strm.get()) { return JNI_FALSE; } std::unique_ptr<SkImageEncoder> encoder(SkImageEncoder::Create(fm)); if (encoder.get()) { SkBitmap skbitmap; bitmap->getSkBitmap(&skbitmap); success = encoder->encodeStream(strm.get(), skbitmap, quality); } return success ? JNI_TRUE : JNI_FALSE; return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE; } static void Bitmap_erase(JNIEnv* env, jobject, jlong bitmapHandle, jint color) { Loading core/jni/android/graphics/BitmapFactory.cpp +11 −10 Original line number Diff line number Diff line Loading @@ -48,31 +48,31 @@ jmethodID gInsetStruct_constructorMethodID; using namespace android; jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format) { jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format) { const char* mimeType; switch (format) { case SkEncodedFormat::kBMP_SkEncodedFormat: case SkEncodedImageFormat::kBMP: mimeType = "image/bmp"; break; case SkEncodedFormat::kGIF_SkEncodedFormat: case SkEncodedImageFormat::kGIF: mimeType = "image/gif"; break; case SkEncodedFormat::kICO_SkEncodedFormat: case SkEncodedImageFormat::kICO: mimeType = "image/x-ico"; break; case SkEncodedFormat::kJPEG_SkEncodedFormat: case SkEncodedImageFormat::kJPEG: mimeType = "image/jpeg"; break; case SkEncodedFormat::kPNG_SkEncodedFormat: case SkEncodedImageFormat::kPNG: mimeType = "image/png"; break; case SkEncodedFormat::kWEBP_SkEncodedFormat: case SkEncodedImageFormat::kWEBP: mimeType = "image/webp"; break; case SkEncodedFormat::kWBMP_SkEncodedFormat: case SkEncodedImageFormat::kWBMP: mimeType = "image/vnd.wap.wbmp"; break; case SkEncodedFormat::kDNG_SkEncodedFormat: case SkEncodedImageFormat::kDNG: mimeType = "image/x-adobe-dng"; break; default: Loading Loading @@ -309,7 +309,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // Set the options and return if the client only wants the size. if (options != NULL) { jstring mimeType = encodedFormatToString(env, codec->getEncodedFormat()); jstring mimeType = encodedFormatToString( env, (SkEncodedImageFormat)codec->getEncodedFormat()); if (env->ExceptionCheck()) { return nullObjectReturn("OOM in encodedFormatToString()"); } Loading core/jni/android/graphics/BitmapFactory.h +2 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ #define _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ #include "GraphicsJNI.h" #include "SkEncodedFormat.h" #include "SkEncodedImageFormat.h" extern jclass gOptions_class; extern jfieldID gOptions_justBoundsFieldID; Loading @@ -20,7 +20,7 @@ extern jfieldID gOptions_mimeFieldID; extern jfieldID gOptions_mCancelID; extern jfieldID gOptions_bitmapFieldID; jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format); jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format); jobject decodeBitmap(JNIEnv* env, void* data, size_t size); Loading core/jni/android/graphics/BitmapRegionDecoder.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in env->SetIntField(options, gOptions_widthFieldID, bitmap.width()); env->SetIntField(options, gOptions_heightFieldID, bitmap.height()); env->SetObjectField(options, gOptions_mimeFieldID, encodedFormatToString(env, brd->getEncodedFormat())); encodedFormatToString(env, (SkEncodedImageFormat)brd->getEncodedFormat())); if (env->ExceptionCheck()) { return nullObjectReturn("OOM in encodedFormatToString()"); } Loading Loading
cmds/screencap/screencap.cpp +14 −7 Original line number Diff line number Diff line Loading @@ -175,13 +175,20 @@ int main(int argc, char** argv) if (base != NULL) { if (png) { const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType); sk_sp<SkData> data(SkImageEncoder::EncodeData(info, base, s*bytesPerPixel(f), SkImageEncoder::kPNG_Type, SkImageEncoder::kDefaultQuality)); if (data.get()) { write(fd, data->data(), data->size()); } const SkImageInfo info = SkImageInfo::Make(w, h, flinger2skia(f), kPremul_SkAlphaType); SkPixmap pixmap(info, base, s * bytesPerPixel(f)); struct FDWStream final : public SkWStream { size_t fBytesWritten = 0; int fFd; FDWStream(int f) : fFd(f) {} size_t bytesWritten() const override { return fBytesWritten; } bool write(const void* buffer, size_t size) override { fBytesWritten += size; return size == 0 || ::write(fFd, buffer, size) > 0; } } fdStream(fd); (void)SkEncodeImage(&fdStream, pixmap, SkEncodedImageFormat::kPNG, 100); if (fn != NULL) { notifyMediaScanner(fn); } Loading
core/jni/android/graphics/Bitmap.cpp +8 −16 Original line number Diff line number Diff line Loading @@ -668,42 +668,34 @@ enum JavaEncodeFormat { static jboolean Bitmap_compress(JNIEnv* env, jobject clazz, jlong bitmapHandle, jint format, jint quality, jobject jstream, jbyteArray jstorage) { LocalScopedBitmap bitmap(bitmapHandle); SkImageEncoder::Type fm; SkEncodedImageFormat fm; switch (format) { case kJPEG_JavaEncodeFormat: fm = SkImageEncoder::kJPEG_Type; fm = SkEncodedImageFormat::kJPEG; break; case kPNG_JavaEncodeFormat: fm = SkImageEncoder::kPNG_Type; fm = SkEncodedImageFormat::kPNG; break; case kWEBP_JavaEncodeFormat: fm = SkImageEncoder::kWEBP_Type; fm = SkEncodedImageFormat::kWEBP; break; default: return JNI_FALSE; } LocalScopedBitmap bitmap(bitmapHandle); if (!bitmap.valid()) { return JNI_FALSE; } bool success = false; std::unique_ptr<SkWStream> strm(CreateJavaOutputStreamAdaptor(env, jstream, jstorage)); if (!strm.get()) { return JNI_FALSE; } std::unique_ptr<SkImageEncoder> encoder(SkImageEncoder::Create(fm)); if (encoder.get()) { SkBitmap skbitmap; bitmap->getSkBitmap(&skbitmap); success = encoder->encodeStream(strm.get(), skbitmap, quality); } return success ? JNI_TRUE : JNI_FALSE; return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE; } static void Bitmap_erase(JNIEnv* env, jobject, jlong bitmapHandle, jint color) { Loading
core/jni/android/graphics/BitmapFactory.cpp +11 −10 Original line number Diff line number Diff line Loading @@ -48,31 +48,31 @@ jmethodID gInsetStruct_constructorMethodID; using namespace android; jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format) { jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format) { const char* mimeType; switch (format) { case SkEncodedFormat::kBMP_SkEncodedFormat: case SkEncodedImageFormat::kBMP: mimeType = "image/bmp"; break; case SkEncodedFormat::kGIF_SkEncodedFormat: case SkEncodedImageFormat::kGIF: mimeType = "image/gif"; break; case SkEncodedFormat::kICO_SkEncodedFormat: case SkEncodedImageFormat::kICO: mimeType = "image/x-ico"; break; case SkEncodedFormat::kJPEG_SkEncodedFormat: case SkEncodedImageFormat::kJPEG: mimeType = "image/jpeg"; break; case SkEncodedFormat::kPNG_SkEncodedFormat: case SkEncodedImageFormat::kPNG: mimeType = "image/png"; break; case SkEncodedFormat::kWEBP_SkEncodedFormat: case SkEncodedImageFormat::kWEBP: mimeType = "image/webp"; break; case SkEncodedFormat::kWBMP_SkEncodedFormat: case SkEncodedImageFormat::kWBMP: mimeType = "image/vnd.wap.wbmp"; break; case SkEncodedFormat::kDNG_SkEncodedFormat: case SkEncodedImageFormat::kDNG: mimeType = "image/x-adobe-dng"; break; default: Loading Loading @@ -309,7 +309,8 @@ static jobject doDecode(JNIEnv* env, SkStreamRewindable* stream, jobject padding // Set the options and return if the client only wants the size. if (options != NULL) { jstring mimeType = encodedFormatToString(env, codec->getEncodedFormat()); jstring mimeType = encodedFormatToString( env, (SkEncodedImageFormat)codec->getEncodedFormat()); if (env->ExceptionCheck()) { return nullObjectReturn("OOM in encodedFormatToString()"); } Loading
core/jni/android/graphics/BitmapFactory.h +2 −2 Original line number Diff line number Diff line Loading @@ -2,7 +2,7 @@ #define _ANDROID_GRAPHICS_BITMAP_FACTORY_H_ #include "GraphicsJNI.h" #include "SkEncodedFormat.h" #include "SkEncodedImageFormat.h" extern jclass gOptions_class; extern jfieldID gOptions_justBoundsFieldID; Loading @@ -20,7 +20,7 @@ extern jfieldID gOptions_mimeFieldID; extern jfieldID gOptions_mCancelID; extern jfieldID gOptions_bitmapFieldID; jstring encodedFormatToString(JNIEnv* env, SkEncodedFormat format); jstring encodedFormatToString(JNIEnv* env, SkEncodedImageFormat format); jobject decodeBitmap(JNIEnv* env, void* data, size_t size); Loading
core/jni/android/graphics/BitmapRegionDecoder.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -187,7 +187,7 @@ static jobject nativeDecodeRegion(JNIEnv* env, jobject, jlong brdHandle, jint in env->SetIntField(options, gOptions_widthFieldID, bitmap.width()); env->SetIntField(options, gOptions_heightFieldID, bitmap.height()); env->SetObjectField(options, gOptions_mimeFieldID, encodedFormatToString(env, brd->getEncodedFormat())); encodedFormatToString(env, (SkEncodedImageFormat)brd->getEncodedFormat())); if (env->ExceptionCheck()) { return nullObjectReturn("OOM in encodedFormatToString()"); } Loading