platform/cc/Pixmap.cc (157 lines of code) (raw):

#include <jni.h> #include "interop.hh" #include "SkPixmap.h" static void deletePixmap(SkPixmap *pixmap) { delete pixmap; } extern "C" { JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Pixmap__1nGetFinalizer (JNIEnv *env, jclass klass) { return ptrToJlong(&deletePixmap); } JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Pixmap__1nMakeNull (JNIEnv *env, jclass klass) { return ptrToJlong(new SkPixmap()); } JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Pixmap__1nMake (JNIEnv *env, jclass klass, jint width, jint height, jint colorType, jint alphaType, jlong colorSpacePtr, jlong pixelsPtr, jint rowBytes) { SkColorSpace* colorSpace = jlongToPtr<SkColorSpace*>(colorSpacePtr); SkImageInfo imageInfo = SkImageInfo::Make(width, height, static_cast<SkColorType>(colorType), static_cast<SkAlphaType>(alphaType), sk_ref_sp<SkColorSpace>(colorSpace)); return ptrToJlong(new SkPixmap( imageInfo, jlongToPtr<void*>(pixelsPtr), rowBytes)); } JNIEXPORT void JNICALL Java_org_jetbrains_skija_Pixmap__1nReset (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); pixmap->reset(); } JNIEXPORT void JNICALL Java_org_jetbrains_skija_Pixmap__1nResetWithInfo (JNIEnv *env, jclass klass, jlong ptr, jint width, jint height, jint colorType, jint alphaType, jlong colorSpacePtr, jlong pixelsPtr, jint rowBytes) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkColorSpace* colorSpace = jlongToPtr<SkColorSpace*>(colorSpacePtr); SkImageInfo imageInfo = SkImageInfo::Make(width, height, static_cast<SkColorType>(colorType), static_cast<SkAlphaType>(alphaType), sk_ref_sp<SkColorSpace>(colorSpace)); pixmap->reset(imageInfo, jlongToPtr<void*>(pixelsPtr), rowBytes); } JNIEXPORT void JNICALL Java_org_jetbrains_skija_Pixmap__1nSetColorSpace (JNIEnv *env, jclass klass, jlong ptr, jlong colorSpacePtr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkColorSpace* colorSpace = jlongToPtr<SkColorSpace*>(colorSpacePtr); pixmap->setColorSpace(sk_ref_sp<SkColorSpace>(colorSpace)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nExtractSubset (JNIEnv *env, jclass klass, jlong ptr, jlong subsetPtr, jint l, jint t, jint w, jint h) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkPixmap* dst = jlongToPtr<SkPixmap*>(subsetPtr); return pixmap->extractSubset(dst, { l, t, w, h }); } JNIEXPORT jobject JNICALL Java_org_jetbrains_skija_Pixmap__1nGetInfo (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); const SkImageInfo& imageInfo = pixmap->info(); return skija::ImageInfo::toJava(env, imageInfo); } JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Pixmap__1nGetRowBytes (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jint>(pixmap->rowBytes()); } JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Pixmap__1nGetAddr (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return ptrToJlong(pixmap->addr()); } JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Pixmap__1nGetRowBytesAsPixels (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jint>(pixmap->rowBytesAsPixels()); } JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Pixmap__1nComputeByteSize (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jint>(pixmap->computeByteSize()); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nComputeIsOpaque (JNIEnv *env, jclass klass, jlong ptr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jboolean>(pixmap->computeIsOpaque()); } JNIEXPORT jint JNICALL Java_org_jetbrains_skija_Pixmap__1nGetColor (JNIEnv *env, jclass klass, jlong ptr, jint x, jint y) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jint>(pixmap->getColor(x, y)); } JNIEXPORT jfloat JNICALL Java_org_jetbrains_skija_Pixmap__1nGetAlphaF (JNIEnv *env, jclass klass, jlong ptr, jint x, jint y) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jfloat>(pixmap->getAlphaf(x, y)); } JNIEXPORT jlong JNICALL Java_org_jetbrains_skija_Pixmap__1nGetAddrAt (JNIEnv *env, jclass klass, jlong ptr, jint x, jint y) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return reinterpret_cast<jlong>(pixmap->addr(x, y)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nReadPixels (JNIEnv *env, jclass klass, jlong ptr, jint width, jint height, jint colorType, jint alphaType, jlong colorSpacePtr, jlong pixelsPtr, jint rowBytes) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkColorSpace* colorSpace = jlongToPtr<SkColorSpace*>(colorSpacePtr); SkImageInfo imageInfo = SkImageInfo::Make(width, height, static_cast<SkColorType>(colorType), static_cast<SkAlphaType>(alphaType), sk_ref_sp<SkColorSpace>(colorSpace)); return static_cast<jboolean>(pixmap->readPixels(imageInfo, jlongToPtr<void*>(pixelsPtr), rowBytes)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nReadPixelsFromPoint (JNIEnv *env, jclass klass, jlong ptr, jint width, jint height, jint colorType, jint alphaType, jlong colorSpacePtr, jlong pixelsPtr, jint rowBytes, jint srcX, jint srcY) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkColorSpace* colorSpace = jlongToPtr<SkColorSpace*>(colorSpacePtr); SkImageInfo imageInfo = SkImageInfo::Make(width, height, static_cast<SkColorType>(colorType), static_cast<SkAlphaType>(alphaType), sk_ref_sp<SkColorSpace>(colorSpace)); return static_cast<jboolean>(pixmap->readPixels(imageInfo, jlongToPtr<void*>(pixelsPtr), rowBytes, srcX, srcY)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nReadPixelsToPixmap (JNIEnv *env, jclass klass, jlong ptr, jlong dstPixmapPtr) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkPixmap* dstPixmap = jlongToPtr<SkPixmap*>(dstPixmapPtr); return static_cast<jboolean>(pixmap->readPixels(*dstPixmap)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nReadPixelsToPixmapFromPoint (JNIEnv *env, jclass klass, jlong ptr, jlong dstPixmapPtr, jint srcX, jint srcY) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkPixmap* dstPixmap = jlongToPtr<SkPixmap*>(dstPixmapPtr); return static_cast<jboolean>(pixmap->readPixels(*dstPixmap, srcX, srcY)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nScalePixels (JNIEnv *env, jclass klass, jlong ptr, jlong dstPixmapPtr, jlong samplingOptions) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); SkPixmap* dstPixmap = jlongToPtr<SkPixmap*>(dstPixmapPtr); return static_cast<jboolean>(pixmap->scalePixels(*dstPixmap, skija::SamplingMode::unpack(samplingOptions))); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nErase (JNIEnv *env, jclass klass, jlong ptr, jint color) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jboolean>(pixmap->erase(color)); } JNIEXPORT jboolean JNICALL Java_org_jetbrains_skija_Pixmap__1nEraseSubset (JNIEnv *env, jclass klass, jlong ptr, jint color, jint l, jint t, jint w, jint h) { SkPixmap* pixmap = jlongToPtr<SkPixmap*>(ptr); return static_cast<jboolean>(pixmap->erase(color, { l, t, w, h })); } }