Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
aa7ae5bb
Unverified
Commit
aa7ae5bb
authored
Oct 13, 2021
by
Oleksandr Karpovich
Committed by
GitHub
Oct 13, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
commonize ImageTest.kt and SurfaceTest.kt (#261)
parent
c9381093
Changes
16
Show whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
249 additions
and
175 deletions
+249
-175
common.h
skiko/src/commonMain/cpp/common.h
+4
-0
common_interop.cc
skiko/src/commonMain/cpp/common_interop.cc
+12
-0
Bitmap.cc
skiko/src/commonMain/cpp/generated/Bitmap.cc
+1
-7
Image.cc
skiko/src/commonMain/cpp/generated/Image.cc
+21
-52
Surface.cc
skiko/src/commonMain/cpp/generated/Surface.cc
+15
-27
Bitmap.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Bitmap.kt
+4
-16
Image.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Image.kt
+11
-9
ImageInfo.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/ImageInfo.kt
+25
-0
Surface.kt
skiko/src/commonMain/kotlin/org/jetbrains/skia/Surface.kt
+6
-8
ImageTest.kt
skiko/src/commonTest/kotlin/org/jetbrains/skia/ImageTest.kt
+89
-0
SurfaceTest.kt
...o/src/commonTest/kotlin/org/jetbrains/skia/SurfaceTest.kt
+4
-7
Bitmap.cc
skiko/src/jvmMain/cpp/common/Bitmap.cc
+3
-10
Image.cc
skiko/src/jvmMain/cpp/common/Image.cc
+10
-7
Surface.cc
skiko/src/jvmMain/cpp/common/Surface.cc
+8
-10
interop.cc
skiko/src/jvmMain/cpp/common/interop.cc
+34
-21
interop.hh
skiko/src/jvmMain/cpp/common/interop.hh
+2
-1
No files found.
skiko/src/commonMain/cpp/common.h
View file @
aa7ae5bb
...
...
@@ -55,6 +55,10 @@ namespace skija {
SkFontStyle
fromKotlin
(
KInt
style
);
KInt
toKotlin
(
const
SkFontStyle
&
fs
);
}
namespace
ImageInfo
{
void
writeImageInfoForInterop
(
SkImageInfo
imageInfo
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
);
}
}
std
::
unique_ptr
<
SkMatrix
>
skMatrix
(
KFloat
*
matrixArray
);
...
...
skiko/src/commonMain/cpp/common_interop.cc
View file @
aa7ae5bb
#include "common.h"
#include "src/utils/SkUTF.h"
#include "include/core/SkImageInfo.h"
#include <stdio.h>
KLong
packTwoInts
(
int32_t
a
,
int32_t
b
)
{
...
...
@@ -145,4 +146,15 @@ namespace skija {
return
(
static_cast
<
int
>
(
fs
.
slant
())
<<
24
)
|
(
fs
.
width
()
<<
16
)
|
fs
.
weight
();
}
}
namespace
ImageInfo
{
void
writeImageInfoForInterop
(
SkImageInfo
imageInfo
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
imageInfoResult
[
0
]
=
imageInfo
.
width
();
imageInfoResult
[
1
]
=
imageInfo
.
height
();
imageInfoResult
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
imageInfoResult
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
colorSpacePtrsArray
[
0
]
=
imageInfo
.
refColorSpace
().
release
();
}
}
}
skiko/src/commonMain/cpp/generated/Bitmap.cc
View file @
aa7ae5bb
...
...
@@ -40,13 +40,7 @@ SKIKO_EXPORT void org_jetbrains_skia_Bitmap__1nGetImageInfo
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
ptr
);
SkImageInfo
imageInfo
=
instance
->
info
();
imageInfoResult
[
0
]
=
instance
->
width
();
imageInfoResult
[
1
]
=
instance
->
height
();
imageInfoResult
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
imageInfoResult
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
colorSpacePtrsArray
[
0
]
=
imageInfo
.
refColorSpace
().
release
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
}
#if 0
...
...
skiko/src/commonMain/cpp/generated/Image.cc
View file @
aa7ae5bb
...
...
@@ -8,25 +8,16 @@
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRaster
(
KInt
width
,
KInt
height
,
KInt
colorType
,
KInt
alphaType
,
KNativePointer
colorSpacePtr
,
KByte
*
bytesArr
,
KNativePointer
rowBytes
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeRaster"
);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeRaster
(KInt width, KInt height, KInt colorType, KInt alphaType, KNativePointer colorSpacePtr, KByte* bytesArr, KNativePointer rowBytes) {
SkColorSpace* colorSpace = reinterpret_cast<SkColorSpace*>((colorSpacePtr));
(
KInt
width
,
KInt
height
,
KInt
colorType
,
KInt
alphaType
,
KNativePointer
colorSpacePtr
,
KByte
*
bytesArr
,
KInt
rowBytes
)
{
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
colorSpacePtr
);
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
static_cast
<
SkColorType
>
(
colorType
),
static_cast
<
SkAlphaType
>
(
alphaType
),
sk_ref_sp
<
SkColorSpace
>
(
colorSpace
));
void* bytes = env->GetPrimitiveArrayCritical(bytesArr, 0);
sk_sp<SkImage> image = SkImage::MakeRasterCopy(SkPixmap(imageInfo, bytes, rowBytes));
env->ReleasePrimitiveArrayCritical(bytesArr, bytes, 0);
sk_sp
<
SkImage
>
image
=
SkImage
::
MakeRasterCopy
(
SkPixmap
(
imageInfo
,
bytesArr
,
rowBytes
));
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeRasterData
...
...
@@ -58,38 +49,18 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeFromPixmap
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeFromEncoded
(
KByte
*
encodedArray
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeFromEncoded"
);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeFromEncoded
(KByte* encodedArray) {
jsize encodedLen = env->GetArrayLength(encodedArray);
KByte* encoded = env->GetByteArrayElements(encodedArray, 0);
sk_sp<SkData> encodedData = SkData::MakeWithCopy(encoded, encodedLen);
env->ReleaseByteArrayElements(encodedArray, encoded, 0);
(
KByte
*
encodedArray
,
KInt
encodedLen
)
{
sk_sp
<
SkData
>
encodedData
=
SkData
::
MakeWithCopy
(
encodedArray
,
encodedLen
);
sk_sp
<
SkImage
>
image
=
SkImage
::
MakeFromEncoded
(
encodedData
);
return
reinterpret_cast
<
KNativePointer
>
(
image
.
release
());
}
#endif
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_Image__1nGetImageInfo
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nGetImageInfo"
);
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Image__1nGetImageInfo
(KNativePointer ptr) {
SKIKO_EXPORT
void
org_jetbrains_skia_Image__1nGetImageInfo
(
KNativePointer
ptr
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
((
ptr
));
return skija::ImageInfo::toJava(env, instance->imageInfo());
SkImageInfo
imageInfo
=
instance
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nEncodeToData
...
...
@@ -101,19 +72,17 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nEncodeToData
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Image__1nMakeShader
(
KNativePointer
ptr
,
KInt
tmx
,
KInt
tmy
,
KNativePointer
sampling
,
KFloat
*
localMatrixArr
)
{
TODO
(
"implement org_jetbrains_skia_Image__1nMakeShader"
);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_Image__1nMakeShader
(KNativePointer ptr, KInt tmx, KInt tmy, KNativePointer sampling, KFloat* localMatrixArr) {
SkImage* instance = reinterpret_cast<SkImage*>((ptr));
std::unique_ptr<SkMatrix> localMatrix = skMatrix(env, localMatrixArr);
sk_sp<SkShader> shader = instance->makeShader(static_cast<SkTileMode>(tmx), static_cast<SkTileMode>(tmy), skija::SamplingMode::unpack(sampling), localMatrix.get());
(
KNativePointer
ptr
,
KInt
tmx
,
KInt
tmy
,
KLong
samplingMode
,
KFloat
*
localMatrixArr
)
{
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
(
ptr
);
std
::
unique_ptr
<
SkMatrix
>
localMatrix
=
skMatrix
(
localMatrixArr
);
sk_sp
<
SkShader
>
shader
=
instance
->
makeShader
(
static_cast
<
SkTileMode
>
(
tmx
),
static_cast
<
SkTileMode
>
(
tmy
),
skija
::
SamplingMode
::
unpack
(
samplingMode
),
localMatrix
.
get
()
);
return
reinterpret_cast
<
KNativePointer
>
(
shader
.
release
());
}
#endif
...
...
skiko/src/commonMain/cpp/generated/Surface.cc
View file @
aa7ae5bb
...
...
@@ -290,24 +290,12 @@ SKIKO_EXPORT KBoolean org_jetbrains_skia_Surface__1nUnique
}
SKIKO_EXPORT
KInteropPointer
org_jetbrains_skia_Surface__1nGetImageInfo
(
KNativePointer
ptr
)
{
TODO
(
"implement org_jetbrains_skia_Surface__1nGetImageInfo"
);
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Surface__1nGetImageInfo
(KNativePointer ptr) {
SKIKO_EXPORT
void
org_jetbrains_skia_Surface__1nGetImageInfo
(
KNativePointer
ptr
,
KInt
*
imageInfoResult
,
KNativePointer
*
colorSpacePtrsArray
)
{
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
((
ptr
));
const SkImageInfo& info = surface->imageInfo();
return env->NewObject(skija::ImageInfo::cls, skija::ImageInfo::ctor,
info.width(),
info.height(),
static_cast<KInt>(info.colorType()),
static_cast<KInt>(info.alphaType()),
reinterpret_cast<KNativePointer>(info.refColorSpace().release()));
SkImageInfo
imageInfo
=
surface
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
imageInfo
,
imageInfoResult
,
colorSpacePtrsArray
);
}
#endif
SKIKO_EXPORT
KNativePointer
org_jetbrains_skia_Surface__1nMakeSurface
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/Bitmap.kt
View file @
aa7ae5bb
...
...
@@ -70,23 +70,11 @@ class Bitmap internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerH
override
val
imageInfo
:
ImageInfo
get
()
=
try
{
if
(
_imageInfo
==
null
)
{
Stats
.
onNativeCall
()
var
colorSpacePtr
:
NativePointer
?
=
null
_imageInfo
=
withResult
(
IntArray
(
4
))
{
intArrayPointer
->
colorSpacePtr
=
withResult
(
NativePointerArray
(
1
))
{
nativePointerArrayPtr
->
_nGetImageInfo
(
_ptr
,
intArrayPointer
,
nativePointerArrayPtr
)
}[
0
]
}.
let
{
ImageInfo
(
width
=
it
[
0
],
height
=
it
[
1
],
colorType
=
it
[
2
],
alphaType
=
it
[
3
],
colorSpace
=
colorSpacePtr
!!
_imageInfo
=
ImageInfo
.
createUsing
(
_ptr
=
_ptr
,
_nGetImageInfo
=
::
_nGetImageInfo
)
}
}
_imageInfo
!!
}
finally
{
reachabilityBarrier
(
this
)
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/Image.kt
View file @
aa7ae5bb
...
...
@@ -26,7 +26,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
*
* @see [https://fiddle.skia.org/c/@Image_MakeRasterCopy](https://fiddle.skia.org/c/@Image_MakeRasterCopy)
*/
fun
makeRaster
(
imageInfo
:
ImageInfo
,
bytes
:
ByteArray
,
rowBytes
:
NativePointer
):
Image
{
fun
makeRaster
(
imageInfo
:
ImageInfo
,
bytes
:
ByteArray
,
rowBytes
:
Int
):
Image
{
return
try
{
Stats
.
onNativeCall
()
val
ptr
=
interopScope
{
...
...
@@ -66,7 +66,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
* @param rowBytes how many bytes in a row
* @return Image
*/
fun
makeRaster
(
imageInfo
:
ImageInfo
,
data
:
Data
,
rowBytes
:
NativePointer
):
Image
{
fun
makeRaster
(
imageInfo
:
ImageInfo
,
data
:
Data
,
rowBytes
:
Int
):
Image
{
return
try
{
Stats
.
onNativeCall
()
val
ptr
=
_nMakeRasterData
(
...
...
@@ -134,7 +134,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
fun
makeFromEncoded
(
bytes
:
ByteArray
?):
Image
{
Stats
.
onNativeCall
()
val
ptr
=
interopScope
{
_nMakeFromEncoded
(
toInterop
(
bytes
))
_nMakeFromEncoded
(
toInterop
(
bytes
)
,
bytes
?.
size
?:
0
)
}
require
(
ptr
!=
NullPointer
)
{
"Failed to Image::makeFromEncoded"
}
return
Image
(
ptr
)
...
...
@@ -158,8 +158,10 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
if
(
_imageInfo
==
null
)
{
commonSynchronized
(
this
)
{
if
(
_imageInfo
==
null
)
{
Stats
.
onNativeCall
()
_imageInfo
=
Image_nGetImageInfo
(
_ptr
)
_imageInfo
=
ImageInfo
.
createUsing
(
_ptr
=
_ptr
,
_nGetImageInfo
=
::
Image_nGetImageInfo
)
}
}
}
...
...
@@ -368,7 +370,7 @@ class Image internal constructor(ptr: NativePointer) : RefCnt(ptr), IHasImageInf
}
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nGetImageInfo"
)
private
external
fun
Image_nGetImageInfo
(
ptr
:
NativePointer
):
ImageInfo
?
private
external
fun
Image_nGetImageInfo
(
ptr
:
NativePointer
,
imageInfo
:
InteropPointer
,
colorSpacePtrs
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeShader"
)
private
external
fun
Image_nMakeShader
(
ptr
:
NativePointer
,
tmx
:
Int
,
tmy
:
Int
,
samplingMode
:
Long
,
localMatrix
:
InteropPointer
):
NativePointer
...
...
@@ -384,7 +386,7 @@ private external fun _nMakeRaster(
alphaType
:
Int
,
colorSpacePtr
:
NativePointer
,
pixels
:
InteropPointer
,
rowBytes
:
NativePointer
rowBytes
:
Int
):
NativePointer
...
...
@@ -396,7 +398,7 @@ private external fun _nMakeRasterData(
alphaType
:
Int
,
colorSpacePtr
:
NativePointer
,
dataPtr
:
NativePointer
,
rowBytes
:
NativePointer
rowBytes
:
Int
):
NativePointer
...
...
@@ -407,7 +409,7 @@ private external fun _nMakeFromBitmap(bitmapPtr: NativePointer): NativePointer
private
external
fun
_nMakeFromPixmap
(
pixmapPtr
:
NativePointer
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nMakeFromEncoded"
)
private
external
fun
_nMakeFromEncoded
(
bytes
:
InteropPointer
):
NativePointer
private
external
fun
_nMakeFromEncoded
(
bytes
:
InteropPointer
,
encodedLength
:
Int
):
NativePointer
@ExternalSymbolName
(
"org_jetbrains_skia_Image__1nEncodeToData"
)
private
external
fun
_nEncodeToData
(
ptr
:
NativePointer
,
format
:
Int
,
quality
:
Int
):
NativePointer
...
...
skiko/src/commonMain/kotlin/org/jetbrains/skia/ImageInfo.kt
View file @
aa7ae5bb
...
...
@@ -2,6 +2,10 @@ package org.jetbrains.skia
import
org.jetbrains.skia.impl.Native
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.NativePointerArray
import
org.jetbrains.skia.impl.InteropPointer
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.withResult
/**
*
...
...
@@ -279,5 +283,26 @@ class ImageInfo(val colorInfo: ColorInfo, val width: Int, val height: Int) {
fun
makeUnknown
(
width
:
Int
,
height
:
Int
):
ImageInfo
{
return
ImageInfo
(
ColorInfo
(
ColorType
.
UNKNOWN
,
ColorAlphaType
.
UNKNOWN
,
null
),
width
,
height
)
}
fun
createUsing
(
_ptr
:
NativePointer
,
_nGetImageInfo
:
(
_ptr
:
NativePointer
,
intArrayPointer
:
InteropPointer
,
nativePointerArrayPtr
:
InteropPointer
)
->
Unit
):
ImageInfo
{
Stats
.
onNativeCall
()
var
colorSpacePtr
:
NativePointer
?
=
null
return
withResult
(
IntArray
(
4
))
{
intArrayPointer
->
colorSpacePtr
=
withResult
(
NativePointerArray
(
1
))
{
nativePointerArrayPtr
->
_nGetImageInfo
(
_ptr
,
intArrayPointer
,
nativePointerArrayPtr
)
}[
0
]
}.
let
{
ImageInfo
(
width
=
it
[
0
],
height
=
it
[
1
],
colorType
=
it
[
2
],
alphaType
=
it
[
3
],
colorSpace
=
colorSpacePtr
!!
)
}
}
}
}
skiko/src/commonMain/kotlin/org/jetbrains/skia/Surface.kt
View file @
aa7ae5bb
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.*
import
org.jetbrains.skia.impl.Library.Companion.staticLoad
import
org.jetbrains.skia.impl.RefCnt
import
org.jetbrains.skia.impl.Stats
import
org.jetbrains.skia.impl.reachabilityBarrier
import
org.jetbrains.skia.impl.NativePointer
import
org.jetbrains.skia.impl.getPtr
class
Surface
:
RefCnt
{
companion
object
{
...
...
@@ -573,8 +569,10 @@ class Surface : RefCnt {
*/
val
imageInfo
:
ImageInfo
get
()
=
try
{
Stats
.
onNativeCall
()
Surface_nGetImageInfo
(
_ptr
)
ImageInfo
.
createUsing
(
_ptr
=
_ptr
,
_nGetImageInfo
=
::
Surface_nGetImageInfo
)
}
finally
{
reachabilityBarrier
(
this
)
}
...
...
@@ -994,7 +992,7 @@ private external fun Surface_nGetWidth(ptr: NativePointer): Int
private
external
fun
Surface_nGetHeight
(
ptr
:
NativePointer
):
Int
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nGetImageInfo"
)
private
external
fun
Surface_nGetImageInfo
(
ptr
:
NativePointer
):
ImageInfo
private
external
fun
Surface_nGetImageInfo
(
ptr
:
NativePointer
,
imageInfo
:
InteropPointer
,
colorSpacePtrs
:
InteropPointer
)
@ExternalSymbolName
(
"org_jetbrains_skia_Surface__1nReadPixels"
)
private
external
fun
Surface_nReadPixels
(
ptr
:
NativePointer
,
bitmapPtr
:
NativePointer
,
srcX
:
Int
,
srcY
:
Int
):
Boolean
...
...
skiko/src/commonTest/kotlin/org/jetbrains/skia/ImageTest.kt
0 → 100644
View file @
aa7ae5bb
package
org.jetbrains.skia
import
org.jetbrains.skia.impl.use
import
org.jetbrains.skiko.tests.runTest
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertTrue
class
ImageTest
{
@Test
fun
imageTest
()
{
imageUnderTest
{
image
->
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
assertTrue
(
image
.
encodeToData
()
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
JPEG
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
JPEG
,
50
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
WEBP
)
?.
bytes
!!
.
isNotEmpty
())
assertTrue
(
image
.
encodeToData
(
EncodedImageFormat
.
WEBP
,
50
)
?.
bytes
!!
.
isNotEmpty
())
}
}
@Test
fun
canGetImageInfo
()
=
runTest
{
imageUnderTest
{
image
->
val
info
=
image
.
imageInfo
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
}
}
@Test
fun
canMakeFromEncodedBytes
()
=
runTest
{
val
encodedBytes
=
imageUnderTest
{
image
->
image
.
encodeToData
()
?.
bytes
!!
}
val
image
=
Image
.
makeFromEncoded
(
encodedBytes
)
assertEquals
(
100
,
image
.
width
)
assertEquals
(
100
,
image
.
height
)
}
@Test
fun
canMakeShader
()
=
runTest
{
val
shader
=
imageUnderTest
{
image
->
image
.
makeShader
(
Matrix33
.
makeRotate
(
45f
))
}
}
@Test
fun
canMakeRaster
()
=
runTest
{
// source: https://fiddle.skia.org/c/@Image_MakeRasterCopy
val
bytes
=
intArrayOf
(
0
xCA
,
0
xDA
,
0
xCA
,
0
xC9
,
0
xA3
,
0
xAC
,
0
xA8
,
0
x89
,
0
xA7
,
0
x87
,
0
x9B
,
0
xB5
,
0
xE5
,
0
x95
,
0
x46
,
0
x90
,
0
x81
,
0
xC5
,
0
x71
,
0
x33
,
0
x75
,
0
x55
,
0
x44
,
0
x40
,
0
x30
).
map
{
it
.
toByte
()
}.
toByteArray
()
val
imageInfo
=
ImageInfo
(
width
=
5
,
height
=
5
,
colorType
=
ColorType
.
GRAY_8
,
alphaType
=
ColorAlphaType
.
OPAQUE
)
val
image
=
Image
.
makeRaster
(
imageInfo
,
bytes
,
5
)
}
private
fun
<
T
>
imageUnderTest
(
block
:
(
Image
)
->
T
):
T
{
return
Surface
.
makeRasterN32Premul
(
100
,
100
).
use
{
surface
->
val
paint
=
Paint
()
paint
.
color
=
-
0
x10000
Path
().
moveTo
(
20f
,
80f
)
.
lineTo
(
50f
,
20f
)
.
lineTo
(
80f
,
80f
)
.
closePath
()
.
use
{
path
->
val
canvas
=
surface
.
canvas
canvas
.
drawPath
(
path
,
paint
)
surface
.
makeImageSnapshot
().
use
{
image
->
block
(
image
)
}
}
}
}
}
skiko/src/
jvmTest/kotlin/org/jetbrains/skiko
/SurfaceTest.kt
→
skiko/src/
commonTest/kotlin/org/jetbrains/skia
/SurfaceTest.kt
View file @
aa7ae5bb
package
org.jetbrains.ski
ko
package
org.jetbrains.ski
a
import
org.jetbrains.skia.Bitmap
import
org.jetbrains.skia.ContentChangeMode
import
org.jetbrains.skia.IRect
import
org.jetbrains.skia.ImageInfo
import
org.jetbrains.skia.Surface
import
org.jetbrains.skia.impl.use
import
kotlin.test.Test
import
kotlin.test.assertEquals
import
kotlin.test.assertFailsWith
...
...
@@ -12,6 +8,7 @@ import kotlin.test.assertNotEquals
import
kotlin.test.assertTrue
class
SurfaceTest
{
@Test
fun
surfaceTest
()
{
assertFailsWith
<
IllegalArgumentException
>
{
...
...
skiko/src/jvmMain/cpp/common/Bitmap.cc
View file @
aa7ae5bb
...
...
@@ -37,16 +37,9 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_BitmapKt__1nGetImageIn
SkBitmap
*
instance
=
reinterpret_cast
<
SkBitmap
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
SkImageInfo
imageInfo
=
instance
->
info
();
jint
*
result_int
=
env
->
GetIntArrayElements
(
imageInfoResult
,
NULL
);
result_int
[
0
]
=
instance
->
width
();
result_int
[
1
]
=
instance
->
height
();
result_int
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
result_int
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
env
->
ReleaseIntArrayElements
(
imageInfoResult
,
result_int
,
0
);
jlong
*
result_long
=
env
->
GetLongArrayElements
(
colorSpaceResultPtr
,
NULL
);
result_long
[
0
]
=
reinterpret_cast
<
jlong
>
(
imageInfo
.
refColorSpace
().
release
());
env
->
ReleaseLongArrayElements
(
colorSpaceResultPtr
,
result_long
,
0
);
skija
::
ImageInfo
::
writeImageInfoForInterop
(
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
);
}
extern
"C"
JNIEXPORT
jint
JNICALL
Java_org_jetbrains_skia_BitmapKt__1nGetRowBytesAsPixels
...
...
skiko/src/jvmMain/cpp/common/Image.cc
View file @
aa7ae5bb
...
...
@@ -5,7 +5,7 @@
#include "interop.hh"
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRaster
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jbyteArray
bytesArr
,
j
long
rowBytes
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jbyteArray
bytesArr
,
j
int
rowBytes
)
{
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
...
...
@@ -19,7 +19,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeRaster
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeRasterData
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jlong
dataPtr
,
j
long
rowBytes
)
{
(
JNIEnv
*
env
,
jclass
jclass
,
jint
width
,
jint
height
,
jint
colorType
,
jint
alphaType
,
jlong
colorSpacePtr
,
jlong
dataPtr
,
j
int
rowBytes
)
{
SkColorSpace
*
colorSpace
=
reinterpret_cast
<
SkColorSpace
*>
(
static_cast
<
uintptr_t
>
(
colorSpacePtr
));
SkImageInfo
imageInfo
=
SkImageInfo
::
Make
(
width
,
height
,
...
...
@@ -46,8 +46,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromPi
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nMakeFromEncoded
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
encodedArray
)
{
jsize
encodedLen
=
env
->
GetArrayLength
(
encodedArray
);
(
JNIEnv
*
env
,
jclass
jclass
,
jbyteArray
encodedArray
,
jint
encodedLen
)
{
jbyte
*
encoded
=
env
->
GetByteArrayElements
(
encodedArray
,
0
);
sk_sp
<
SkData
>
encodedData
=
SkData
::
MakeWithCopy
(
encoded
,
encodedLen
);
env
->
ReleaseByteArrayElements
(
encodedArray
,
encoded
,
0
);
...
...
@@ -57,10 +56,14 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ImageKt__1nMakeFromEn
return
reinterpret_cast
<
jlong
>
(
image
.
release
());
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_ImageKt_Image_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_ImageKt_Image_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
SkImage
*
instance
=
reinterpret_cast
<
SkImage
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
return
skija
::
ImageInfo
::
toJava
(
env
,
instance
->
imageInfo
());
SkImageInfo
imageInfo
=
instance
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
);
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_ImageKt__1nEncodeToData
...
...
skiko/src/jvmMain/cpp/common/Surface.cc
View file @
aa7ae5bb
...
...
@@ -224,16 +224,14 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_SurfaceKt__1nUniqu
return
surface
->
unique
();
}
extern
"C"
JNIEXPORT
jobject
JNICALL
Java_org_jetbrains_skia_SurfaceKt_Surface_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
)
{
extern
"C"
JNIEXPORT
void
JNICALL
Java_org_jetbrains_skia_SurfaceKt_Surface_1nGetImageInfo
(
JNIEnv
*
env
,
jclass
jclass
,
jlong
ptr
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
SkSurface
*
surface
=
reinterpret_cast
<
SkSurface
*>
(
static_cast
<
uintptr_t
>
(
ptr
));
const
SkImageInfo
&
info
=
surface
->
imageInfo
();
return
env
->
NewObject
(
skija
::
ImageInfo
::
cls
,
skija
::
ImageInfo
::
ctor
,
info
.
width
(),
info
.
height
(),
static_cast
<
jint
>
(
info
.
colorType
()),
static_cast
<
jint
>
(
info
.
alphaType
()),
reinterpret_cast
<
jlong
>
(
info
.
refColorSpace
().
release
()));
SkImageInfo
imageInfo
=
surface
->
imageInfo
();
skija
::
ImageInfo
::
writeImageInfoForInterop
(
env
,
imageInfo
,
imageInfoResult
,
colorSpaceResultPtr
);
}
extern
"C"
JNIEXPORT
jlong
JNICALL
Java_org_jetbrains_skia_SurfaceKt__1nMakeSurface
...
...
skiko/src/jvmMain/cpp/common/interop.cc
View file @
aa7ae5bb
...
...
@@ -375,6 +375,19 @@ namespace skija {
static_cast
<
jint
>
(
info
.
alphaType
()),
reinterpret_cast
<
jlong
>
(
info
.
refColorSpace
().
release
()));
}
void
writeImageInfoForInterop
(
JNIEnv
*
env
,
SkImageInfo
imageInfo
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
)
{
jint
*
result_int
=
env
->
GetIntArrayElements
(
imageInfoResult
,
NULL
);
result_int
[
0
]
=
imageInfo
.
width
();
result_int
[
1
]
=
imageInfo
.
height
();
result_int
[
2
]
=
static_cast
<
int
>
(
imageInfo
.
colorType
());
result_int
[
3
]
=
static_cast
<
int
>
(
imageInfo
.
alphaType
());
env
->
ReleaseIntArrayElements
(
imageInfoResult
,
result_int
,
0
);
jlong
*
result_long
=
env
->
GetLongArrayElements
(
colorSpaceResultPtr
,
NULL
);
result_long
[
0
]
=
reinterpret_cast
<
jlong
>
(
imageInfo
.
refColorSpace
().
release
());
env
->
ReleaseLongArrayElements
(
colorSpaceResultPtr
,
result_long
,
0
);
}
}
namespace
IPoint
{
...
...
skiko/src/jvmMain/cpp/common/interop.hh
View file @
aa7ae5bb
...
...
@@ -185,6 +185,7 @@ namespace skija {
void
onLoad
(
JNIEnv
*
env
);
void
onUnload
(
JNIEnv
*
env
);
jobject
toJava
(
JNIEnv
*
env
,
const
SkImageInfo
&
imageInfo
);
void
writeImageInfoForInterop
(
JNIEnv
*
env
,
SkImageInfo
imageInfo
,
jintArray
imageInfoResult
,
jlongArray
colorSpaceResultPtr
);
}
namespace
IPoint
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment