PNGText

To read/write data from a png image

Constructors

this
this()

Constructor

Destructor

~this
~this()
Undocumented in source.

Members

Functions

calculateOptimumDensity
ubyte calculateOptimumDensity(int n)

Calculates the least density that can be used to store n bytes into loaded image.

capacity
int capacity(ubyte density)
decode
void decode()

decodes data from loaded image

encode
void encode()

encodes data into loaded image.

load
void load()

Loads an image.

save
void save()

Saves an image

Properties

data
ubyte[] data [@property getter]
ubyte[] data [@property setter]
filename
string filename [@property getter]
string filename [@property setter]
imageLoaded
bool imageLoaded [@property getter]

Static functions

densityName
string densityName(ubyte density)
isValidDensity
bool isValidDensity(ubyte density)

Checks if a number is a valid value for use as storage density

qualityName
string qualityName(ubyte density)

Examples

writeln("pngtext.d unittests:");
import std.stdio : writeln;
import std.conv : to;
writeln("unittests for PNGText.splitByte and PNGText.joinByte started");
// splitByte
ubyte[] bytes;
bytes.length = 8;
bytes[] = 128;
PNGText.splitByte(cast(ubyte)0B10101010, cast(ubyte)0, bytes);
assert(bytes == [128, 129, 128, 129, 128, 129, 128, 129]);
assert(PNGText.joinByte(bytes, cast(ubyte)0) == 0B10101010);

PNGText.splitByte(cast(ubyte)0B10101010, cast(ubyte)1, bytes);
assert(bytes[0 .. 4] == [130, 130, 130, 130]);
assert(PNGText.joinByte(bytes[0 .. 4], cast(ubyte)1) == 0B10101010);

PNGText.splitByte(cast(ubyte)0B10101010, cast(ubyte)2, bytes);
assert(bytes[0 .. 2] == [0B10001010, 0B10001010]);
assert(PNGText.joinByte(bytes[0 .. 2], cast(ubyte)2) == 0B10101010);

PNGText.splitByte(cast(ubyte)0B10101010, cast(ubyte)3, bytes);
assert(bytes[0] == 0B10101010);
assert(PNGText.joinByte(bytes[0 .. 1], cast(ubyte)3) == 0B10101010);

writeln("unittests for PNGText.writeHeader and PNGText.readHeader started");
// write some stuff
PNGText obj = new PNGText();
obj.createDummyStream(1024);
obj._stream[] = 0B01011100;
bytes.length = HEADER_LENGTH;
bytes = [215, 1, 0];
obj.writeHeader(bytes);
assert (obj.readHeader == bytes);
// write some more stuff
bytes[] = 0B00111100;
obj.writeHeader(bytes);
assert(obj.readHeader == [0B00111100, 0B00111100, 0B00111100]);

writeln("unittests for PNGText.encodeDataToStream and PNGText.decodeDataFromStream started");
bytes.length = 100;
foreach (i; 0 .. bytes.length){
	bytes[i] = cast(ubyte)i;
}
foreach (density; DENSITIES){
	obj._data = bytes.dup;
	writeln("\tencoding with density=",density);
	obj.encodeDataToStream(density);
	obj._data[] = 0;
	writeln("\tdecoding with density=",density);
	obj.decodeDataFromStream(density, 100);
	assert(obj._data == bytes);
}
writeln("pngtext.d unittests over");

Meta