skiasharp/utils/NativeLibraryMiniTest/source/Program.cs
Matthew Leibowitz a3472b0627
Build for Linux ARM32 (armhf) and ARM64 (aarch64) (#1382)
Co-authored-by: jp2masa <jp2masa@users.noreply.github.com>
2020-07-07 02:23:42 +02:00

125 lines
4.9 KiB
C#

using System;
using System.Runtime.InteropServices;
using sk_bitmap_t = System.IntPtr;
using sk_colorspace_t = System.IntPtr;
using sk_pixmap_t = System.IntPtr;
using sk_wstream_t = System.IntPtr;
using sk_wstream_filestream_t = System.IntPtr;
namespace NativeLibraryMiniTest {
unsafe class Program {
const string SKIA = "libSkiaSharp";
static int Main() {
Console.WriteLine("Starting test...");
Console.WriteLine($"OS = {RuntimeInformation.OSDescription}");
Console.WriteLine($"OS Arch = {RuntimeInformation.OSArchitecture}");
Console.WriteLine($"Proc Arch = {RuntimeInformation.ProcessArchitecture}");
Console.WriteLine("Version test...");
Console.WriteLine($"sk_version_get_milestone() = {sk_version_get_milestone()}");
var str = Marshal.PtrToStringAnsi((IntPtr)sk_version_get_string());
Console.WriteLine($"sk_version_get_string() = {str}");
Console.WriteLine("Color type test...");
Console.WriteLine($"sk_colortype_get_default_8888() = {sk_colortype_get_default_8888()}");
Console.WriteLine("Bitmap create and save test...");
var bmp = sk_bitmap_new();
var info = new sk_imageinfo_t {
width = 100,
height = 100,
colorType = sk_colortype_get_default_8888(),
alphaType = sk_alphatype_t.Premul,
};
sk_bitmap_try_alloc_pixels_with_flags(bmp, &info, 0);
sk_bitmap_erase(bmp, 0xFFFF0000);
var pix = sk_pixmap_new();
sk_bitmap_peek_pixels(bmp, pix);
var stream = sk_filewstream_new("output.png");
var opt = new sk_pngencoder_options_t {
fFilterFlags = 248,
fZLibLevel = 6,
};
sk_pngencoder_encode(stream, pix, &opt);
sk_filewstream_destroy(stream);
sk_pixmap_destructor(pix);
sk_bitmap_destructor(bmp);
Console.WriteLine("Test complete.");
return 0;
}
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern void* sk_version_get_string();
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern int sk_version_get_milestone();
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern sk_colortype_t sk_colortype_get_default_8888();
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern sk_bitmap_t sk_bitmap_new();
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
static extern bool sk_bitmap_try_alloc_pixels_with_flags(sk_bitmap_t cbitmap, sk_imageinfo_t* requestedInfo, uint flags);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern void sk_bitmap_erase(sk_bitmap_t cbitmap, uint color);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
static extern bool sk_bitmap_peek_pixels(sk_bitmap_t cbitmap, sk_pixmap_t cpixmap);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
static extern bool sk_pngencoder_encode(sk_wstream_t dst, sk_pixmap_t src, void* options);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern void sk_bitmap_destructor(sk_bitmap_t cbitmap);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern sk_pixmap_t sk_pixmap_new();
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern void sk_pixmap_destructor(sk_pixmap_t cpixmap);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern sk_wstream_filestream_t sk_filewstream_new([MarshalAs(UnmanagedType.LPStr)] string path);
[DllImport(SKIA, CallingConvention = CallingConvention.Cdecl)]
static extern void sk_filewstream_destroy(sk_wstream_filestream_t cstream);
[StructLayout(LayoutKind.Sequential)]
unsafe partial struct sk_imageinfo_t {
public sk_colorspace_t colorspace;
public int width;
public int height;
public sk_colortype_t colorType;
public sk_alphatype_t alphaType;
}
enum sk_colortype_t {
Unknown = 0,
Rgba8888 = 4,
Bgra8888 = 6,
}
enum sk_alphatype_t {
Unknown = 0,
Opaque = 1,
Premul = 2,
Unpremul = 3,
}
[StructLayout (LayoutKind.Sequential)]
struct sk_pngencoder_options_t {
public int fFilterFlags;
public int fZLibLevel;
public void* fComments;
}
}
}