mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-01-26 19:12:07 -05:00
74 lines
2 KiB
C#
74 lines
2 KiB
C#
// Copyright 2014-2017 ClassicalSharp | Licensed under BSD-3
|
|
using System;
|
|
using System.Drawing;
|
|
using System.IO;
|
|
#if ANDROID
|
|
using Android.Graphics;
|
|
#else
|
|
using System.Drawing.Imaging;
|
|
#endif
|
|
|
|
namespace ClassicalSharp {
|
|
|
|
/// <summary> Abstracts away platform specific operations. </summary>
|
|
public static class Platform {
|
|
|
|
public static bool ValidBitmap(Bitmap bmp) {
|
|
// Mono seems to be returning a bitmap with a native pointer of zero in some weird cases.
|
|
// We can detect this as property access raises an ArgumentException.
|
|
try {
|
|
int height = bmp.Height;
|
|
PixelFormat format = bmp.PixelFormat;
|
|
// make sure these are not optimised out
|
|
return height != -1 && format != PixelFormat.Undefined;
|
|
} catch (ArgumentException) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static Bitmap ReadBmp32Bpp(IDrawer2D drawer, byte[] data) {
|
|
return ReadBmp32Bpp(drawer, new MemoryStream(data));
|
|
}
|
|
|
|
public static Bitmap ReadBmp32Bpp(IDrawer2D drawer, Stream src) {
|
|
Bitmap bmp = ReadBmp(src);
|
|
if (!ValidBitmap(bmp)) return null;
|
|
if (!Is32Bpp(bmp)) drawer.ConvertTo32Bpp(ref bmp);
|
|
return bmp;
|
|
}
|
|
|
|
public static Bitmap CreateBmp(int width, int height) {
|
|
#if !ANDROID
|
|
return new Bitmap(width, height);
|
|
#else
|
|
return Bitmap.CreateBitmap(width, height, Bitmap.Config.Argb8888);
|
|
#endif
|
|
}
|
|
|
|
public static Bitmap ReadBmp(Stream src) {
|
|
#if !ANDROID
|
|
return new Bitmap(src);
|
|
#else
|
|
return BitmapFactory.DecodeStream(src);
|
|
#endif
|
|
}
|
|
|
|
public static void WriteBmp(Bitmap bmp, Stream dst) {
|
|
#if !ANDROID
|
|
bmp.Save(dst, ImageFormat.Png);
|
|
#else
|
|
bmp.Compress(Bitmap.CompressFormat.Png, 100, dst);
|
|
#endif
|
|
}
|
|
|
|
public static bool Is32Bpp(Bitmap bmp) {
|
|
#if !ANDROID
|
|
PixelFormat format = bmp.PixelFormat;
|
|
return format == PixelFormat.Format32bppRgb || format == PixelFormat.Format32bppArgb;
|
|
#else
|
|
Bitmap.Config config = bmp.GetConfig();
|
|
return config != null && config == Bitmap.Config.Argb8888;
|
|
#endif
|
|
}
|
|
}
|
|
}
|