fixed ticket [f9c074e766ade1bd] (pickups should not be infinitely tall) (i hope ;-)
[k8vavoom.git] / utils / dlang / zgrab_copy.d
blob2b6349a8d5d422f116bef3e83df3bde6498d1340
1 import arsd.image;
2 import iv.vfs.io;
5 PNG *loadPng (string fname) {
6 import std.file;
7 return readPng(cast(ubyte[])read(fname));
11 Chunk clone (Chunk *cc) {
12 Chunk res;
13 res.size = cc.size;
14 res.type[] = cc.type[];
15 res.payload = cc.payload.dup;
16 res.checksum = cc.checksum;
17 return res;
20 void main (string[] args) {
21 assert(args.length == 3);
22 auto png = loadPng(args[1]);
23 Chunk grab = png.getChunk("grAb").clone;
24 if (grab.size != 8) assert(0);
26 int ofsx = grab.payload[3]|(grab.payload[2]<<8)|(grab.payload[1]<<16)|(grab.payload[0]<<24);
27 int ofsy = grab.payload[4+3]|(grab.payload[4+2]<<8)|(grab.payload[4+1]<<16)|(grab.payload[4+0]<<24);
28 writeln(" offset: (", ofsx, ", ", ofsy, ")");
30 auto destpng = loadPng(args[2]);
31 foreach (ref const cc; destpng.chunks) {
32 if (cast(const(char)[])cc.type[] == "grAb") {
33 //writeln(" ", cc.payload);
34 int ofsx = cc.payload[3]|(cc.payload[2]<<8)|(cc.payload[1]<<16)|(cc.payload[0]<<24);
35 int ofsy = cc.payload[4+3]|(cc.payload[4+2]<<8)|(cc.payload[4+1]<<16)|(cc.payload[4+0]<<24);
36 writeln(" offset: (", ofsx, ", ", ofsy, ")");
37 assert(0);
40 destpng.insertChunk(&grab, true);
41 destpng.length = 0;
42 import std.file;
43 std.file.write(args[2], writePng(destpng));