Merge "SkImageEncoder->SkEncodeImage"
This commit is contained in:
committed by
Android (Google) Code Review
commit
85e2fa4ee9
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
SkBitmap skbitmap;
|
||||
bitmap->getSkBitmap(&skbitmap);
|
||||
return SkEncodeImage(strm.get(), skbitmap, fm, quality) ? JNI_TRUE : JNI_FALSE;
|
||||
}
|
||||
|
||||
static void Bitmap_erase(JNIEnv* env, jobject, jlong bitmapHandle, jint color) {
|
||||
|
||||
@@ -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:
|
||||
@@ -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()");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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()");
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
#include "Movie.h"
|
||||
#include "SkStream.h"
|
||||
#include "SkTRegistry.h"
|
||||
|
||||
typedef SkTRegistry<Movie*(*)(SkStreamRewindable*)> MovieReg;
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "SkiaPipeline.h"
|
||||
|
||||
#include "utils/TraceUtils.h"
|
||||
#include <SkImageEncoder.h>
|
||||
#include <SkOSFile.h>
|
||||
#include <SkOverdrawCanvas.h>
|
||||
#include <SkOverdrawColorFilter.h>
|
||||
@@ -166,8 +167,10 @@ class PngPixelSerializer : public SkPixelSerializer {
|
||||
public:
|
||||
bool onUseEncodedData(const void*, size_t) override { return true; }
|
||||
SkData* onEncode(const SkPixmap& pixmap) override {
|
||||
return SkImageEncoder::EncodeData(pixmap.info(), pixmap.addr(), pixmap.rowBytes(),
|
||||
SkImageEncoder::kPNG_Type, 100);
|
||||
SkDynamicMemoryWStream buf;
|
||||
return SkEncodeImage(&buf, pixmap, SkEncodedImageFormat::kPNG, 100)
|
||||
? buf.detachAsData().release()
|
||||
: nullptr;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user