474 CheckAndClearException(env);
475 if (data) {
476 return String(env, data);
477 }
478 }
479 return "data:,";
480 }
481
482 Vector<uint8_t> ImageBuffer::toData(const String& mimeType, std::optional<double>) const
483 {
484 if (MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)) {
485 // RenderQueue need to be processed before pixel buffer extraction.
486 // For that purpose it has to be in actual state.
487 context().platformContext()->rq().flushBuffer();
488
489 JNIEnv* env = WebCore_GetJavaEnv();
490
491 static jmethodID midToData = env->GetMethodID(
492 PG_GetImageClass(env),
493 "toData",
494 "(Ljava/lang/String;)Ljava/lang/String;");
495 ASSERT(midToData);
496
497 JLocalRef<jbyteArray> jdata((jbyteArray)env->CallObjectMethod(
498 m_data.getWCImage(),
499 midToData,
500 (jstring) JLString(mimeType.toJavaString(env))));
501
502 CheckAndClearException(env);
503 if (jdata) {
504 uint8_t* dataArray = (uint8_t*)env->GetPrimitiveArrayCritical((jbyteArray)jdata, 0);
505 Vector<uint8_t> data;
506 data.append(dataArray, env->GetArrayLength(jdata));
507 env->ReleasePrimitiveArrayCritical(jdata, dataArray, 0);
508 return data;
509 }
510 }
511 return { };
512 }
513
514 }
|
474 CheckAndClearException(env);
475 if (data) {
476 return String(env, data);
477 }
478 }
479 return "data:,";
480 }
481
482 Vector<uint8_t> ImageBuffer::toData(const String& mimeType, std::optional<double>) const
483 {
484 if (MIMETypeRegistry::isSupportedImageMIMETypeForEncoding(mimeType)) {
485 // RenderQueue need to be processed before pixel buffer extraction.
486 // For that purpose it has to be in actual state.
487 context().platformContext()->rq().flushBuffer();
488
489 JNIEnv* env = WebCore_GetJavaEnv();
490
491 static jmethodID midToData = env->GetMethodID(
492 PG_GetImageClass(env),
493 "toData",
494 "(Ljava/lang/String;)[B");
495 ASSERT(midToData);
496
497 JLocalRef<jbyteArray> jdata((jbyteArray)env->CallObjectMethod(
498 m_data.getWCImage(),
499 midToData,
500 (jstring) JLString(mimeType.toJavaString(env))));
501
502 CheckAndClearException(env);
503 if (jdata) {
504 uint8_t* dataArray = (uint8_t*)env->GetPrimitiveArrayCritical((jbyteArray)jdata, 0);
505 Vector<uint8_t> data;
506 data.append(dataArray, env->GetArrayLength(jdata));
507 env->ReleasePrimitiveArrayCritical(jdata, dataArray, 0);
508 return data;
509 }
510 }
511 return { };
512 }
513
514 }
|