mirror of https://github.com/buggins/dlangui.git
84 lines
1.7 KiB
D
84 lines
1.7 KiB
D
// dimage is actually stripped out part of dlib - just to support reading PNG and JPEG
|
|
module dimage.image;
|
|
|
|
//import dimage.color;
|
|
|
|
class ImageLoadException : Exception
|
|
{
|
|
this(string msg, string file = __FILE__, size_t line = __LINE__, Throwable next = null)
|
|
{
|
|
super(msg, file, line, next);
|
|
}
|
|
}
|
|
|
|
|
|
class SuperImageFactory {
|
|
SuperImage createImage(int width, int height, int components, int bitsPerComponent) {
|
|
return new SuperImage(width, height, components, bitsPerComponent);
|
|
}
|
|
}
|
|
|
|
class SuperImage {
|
|
immutable int width;
|
|
immutable int height;
|
|
uint[] data;
|
|
immutable int channels;
|
|
immutable int bitDepth;
|
|
immutable int length;
|
|
|
|
void opIndexAssign(uint color, int x, int y) {
|
|
data[x + y * width] = color;
|
|
}
|
|
|
|
uint opIndex(int x, int y) {
|
|
return data[x + y * width];
|
|
}
|
|
|
|
this(int w, int h, int chan, int depth) {
|
|
width = w;
|
|
height = h;
|
|
channels = chan;
|
|
bitDepth = depth;
|
|
length = width * height;
|
|
data.length = width * height;
|
|
}
|
|
void free() {
|
|
data = null;
|
|
}
|
|
}
|
|
|
|
__gshared SuperImageFactory defaultImageFactory = new SuperImageFactory();
|
|
|
|
|
|
/*
|
|
* Byte operations
|
|
*/
|
|
version (BigEndian)
|
|
{
|
|
uint bigEndian(uint value) nothrow
|
|
{
|
|
return value;
|
|
}
|
|
|
|
uint networkByteOrder(uint value) nothrow
|
|
{
|
|
return value;
|
|
}
|
|
}
|
|
|
|
version (LittleEndian)
|
|
{
|
|
uint bigEndian(uint value) nothrow
|
|
{
|
|
return value << 24
|
|
| (value & 0x0000FF00) << 8
|
|
| (value & 0x00FF0000) >> 8
|
|
| value >> 24;
|
|
}
|
|
|
|
uint networkByteOrder(uint value) nothrow
|
|
{
|
|
return bigEndian(value);
|
|
}
|
|
}
|