annotate dwt/internal/image/PngEncoder.d @ 240:ce446666f5a2

Update to SWT 3.4M7
author Frank Benoit <benoit@tionex.de>
date Mon, 12 May 2008 19:13:01 +0200
parents ee2998e3cfaa
children c0d810de7093
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
1 /*******************************************************************************
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
2 * Copyright (c) 2000, 2006 IBM Corporation and others.
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
7 *
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
8 * Contributors:
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
108
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
10 * Port to the D programming language:
0f12f6bb9739 author notice
Frank Benoit <benoit@tionex.de>
parents: 71
diff changeset
11 * Frank Benoit <benoit@tionex.de>
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
12 *******************************************************************************/
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
13 module dwt.internal.image.PngEncoder;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
15 import dwt.internal.image.LEDataOutputStream;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
16 import dwt.internal.image.PngDeflater;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
17 import dwt.dwthelper.ByteArrayOutputStream;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
18 import dwt.dwthelper.OutputStream;
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
19 import dwt.DWT;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
20 import dwt.graphics.ImageData;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
21 import dwt.graphics.ImageLoader;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
22 import dwt.graphics.RGB;
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
23 import dwt.internal.Compatibility;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
24 import dwt.internal.image.PngChunk;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
25
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
26 import tango.core.Exception;
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
27
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
28 final class PngEncoder {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
29
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
30 static const byte SIGNATURE[] = [cast(byte) '\211', cast(byte) 'P', cast(byte) 'N', cast(byte) 'G', cast(byte) '\r', cast(byte) '\n', cast(byte) '\032', cast(byte) '\n'];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
31 static const byte TAG_IHDR[] = [cast(byte) 'I', cast(byte) 'H', cast(byte) 'D', cast(byte) 'R'];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
32 static const byte TAG_PLTE[] = [cast(byte) 'P', cast(byte) 'L', cast(byte) 'T', cast(byte) 'E'];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
33 static const byte TAG_TRNS[] = [cast(byte) 't', cast(byte) 'R', cast(byte) 'N', cast(byte) 'S'];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
34 static const byte TAG_IDAT[] = [cast(byte) 'I', cast(byte) 'D', cast(byte) 'A', cast(byte) 'T'];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
35 static const byte TAG_IEND[] = [cast(byte) 'I', cast(byte) 'E', cast(byte) 'N', cast(byte) 'D'];
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
36
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
37 ByteArrayOutputStream bytes;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
38 PngChunk chunk;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
39
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
40 ImageLoader loader;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
41 ImageData data;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
42 int transparencyType;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
43
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
44 int width, height, bitDepth, colorType;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
45
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
46 int compressionMethod = 0;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
47 int filterMethod = 0;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
48 int interlaceMethod = 0;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
49
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
50 public this(ImageLoader loader) {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
51 this.bytes = new ByteArrayOutputStream(1024);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
52 this.loader = loader;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
53 this.data = loader.data[0];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
54 this.transparencyType = data.getTransparencyType();
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
55
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
56 this.width = data.width;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
57 this.height = data.height;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
58
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
59 this.bitDepth = 8;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
60
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
61 this.colorType = 2;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
62
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
63 if (data.palette.isDirect) {
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
64 if (transparencyType is DWT.TRANSPARENCY_ALPHA) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
65 this.colorType = 6;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
66 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
67 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
68 else {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
69 this.colorType = 3;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
70 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
71
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
72 if (!(colorType is 2 || colorType is 3 || colorType is 6)) DWT.error(DWT.ERROR_INVALID_IMAGE);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
73
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
74 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
75
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
76 void writeShort(ByteArrayOutputStream baos, int theShort) {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
77
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
78 byte byte1 = cast(byte) ((theShort >> 8) & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
79 byte byte2 = cast(byte) (theShort & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
80 byte[] temp = [byte1, byte2];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
81 baos.write(temp, 0, 2);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
82
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
83 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
84
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
85 void writeInt(ByteArrayOutputStream baos, int theInt) {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
86
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
87 byte byte1 = cast(byte) ((theInt >> 24) & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
88 byte byte2 = cast(byte) ((theInt >> 16) & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
89 byte byte3 = cast(byte) ((theInt >> 8) & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
90 byte byte4 = cast(byte) (theInt & 0xff);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
91 byte[] temp = [byte1, byte2, byte3, byte4];
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
92 baos.write(temp, 0, 4);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
93
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
94 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
95
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
96 void writeChunk(byte[] tag, byte[] buffer) {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
97
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
98 int bufferLength = (buffer !is null) ? buffer.length : 0;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
99
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
100 chunk = new PngChunk(bufferLength);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
101
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
102 writeInt(bytes, bufferLength);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
103 bytes.write(tag, 0, 4);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
104 chunk.setType(tag);
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
105 if (bufferLength !is 0) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
106 bytes.write(buffer, 0, bufferLength);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
107 chunk.setData(buffer);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
108 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
109 else {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
110 chunk.setCRC(chunk.computeCRC());
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
111 }
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
112 writeInt(bytes, chunk.getCRC());
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
113
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
114 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
115
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
116 void writeSignature() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
117
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
118 bytes.write(SIGNATURE, 0, 8);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
119
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
120 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
121
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
122 void writeHeader() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
123
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
124 ByteArrayOutputStream baos = new ByteArrayOutputStream(13);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
125
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
126 writeInt(baos, width);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
127 writeInt(baos, height);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
128 baos.write(bitDepth);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
129 baos.write(colorType);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
130 baos.write(compressionMethod);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
131 baos.write(filterMethod);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
132 baos.write(interlaceMethod);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
133
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
134 writeChunk(TAG_IHDR, baos.toByteArray());
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
135
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
136 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
137
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
138 void writePalette() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
139
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
140 RGB[] RGBs = data.palette.getRGBs();
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
141
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
142 if (RGBs.length > 256) DWT.error(DWT.ERROR_INVALID_IMAGE);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
143
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
144 ByteArrayOutputStream baos = new ByteArrayOutputStream(RGBs.length);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
145
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
146 for (int i = 0; i < RGBs.length; i++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
147
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
148 baos.write(cast(byte) RGBs[i].red);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
149 baos.write(cast(byte) RGBs[i].green);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
150 baos.write(cast(byte) RGBs[i].blue);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
151
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
152 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
153
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
154 writeChunk(TAG_PLTE, baos.toByteArray());
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
155
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
156 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
157
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
158 void writeTransparency() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
159
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
160 ByteArrayOutputStream baos = new ByteArrayOutputStream();
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
161
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
162 switch (transparencyType) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
163
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
164 case DWT.TRANSPARENCY_ALPHA:
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
165
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
166 int pixelValue, alphaValue;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
167
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
168 byte[] alphas = new byte[data.palette.getRGBs().length];
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
169
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
170 for (int y = 0; y < height; y++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
171
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
172 for (int x = 0; x < width; x++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
173
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
174 pixelValue = data.getPixel(x, y);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
175 alphaValue = data.getAlpha(x, y);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
176
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
177 alphas[pixelValue] = cast(byte) alphaValue;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
178
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
179 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
180
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
181 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
182
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
183 baos.write(alphas, 0, alphas.length);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
184
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
185 break;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
186
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
187 case DWT.TRANSPARENCY_PIXEL:
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
188
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
189 int pixel = data.transparentPixel;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
190
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
191 if (colorType is 2) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
192
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
193 int redMask = data.palette.redMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
194 int redShift = data.palette.redShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
195 int greenMask = data.palette.greenMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
196 int greenShift = data.palette.greenShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
197 int blueShift = data.palette.blueShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
198 int blueMask = data.palette.blueMask;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
199
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
200 int r = pixel & redMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
201 r = (redShift < 0) ? r >>> -redShift : r << redShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
202 int g = pixel & greenMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
203 g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
204 int b = pixel & blueMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
205 b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
206
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
207 writeShort(baos, r);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
208 writeShort(baos, g);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
209 writeShort(baos, b);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
210
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
211 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
212
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
213 if (colorType is 3) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
214
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
215 byte[] padding = new byte[pixel + 1];
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
216
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
217 for (int i = 0; i < pixel; i++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
218
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
219 padding[i] = cast(byte) 255;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
220
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
221 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
222
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
223 padding[pixel] = cast(byte) 0;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
224
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
225 baos.write(padding, 0, padding.length);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
226
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
227 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
228
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
229 break;
55
93981635e709 Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents: 14
diff changeset
230 default:
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
231
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
232 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
233
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
234 writeChunk(TAG_TRNS, baos.toByteArray());
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
235
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
236 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
237
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
238 void writeImageData() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
239
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
240 ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
241 OutputStream os = Compatibility.newDeflaterOutputStream(baos);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
242 if (os is null) os = baos;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
243
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
244 if (colorType is 3) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
245
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
246 byte[] lineData = new byte[width];
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
247
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
248 for (int y = 0; y < height; y++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
249
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
250 int filter = 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
251 os.write(filter);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
252
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
253 data.getPixels(0, y, width, lineData, 0);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
254
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
255 for (int x = 0; x < lineData.length; x++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
256
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
257 os.write(lineData[x]);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
258
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
259 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
260
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
261 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
262
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
263 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
264
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
265 else {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
266
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
267 int[] lineData = new int[width];
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
268 byte[] alphaData = null;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
269 if (colorType is 6) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
270 alphaData = new byte[width];
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
271 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
272
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
273 int redMask = data.palette.redMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
274 int redShift = data.palette.redShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
275 int greenMask = data.palette.greenMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
276 int greenShift = data.palette.greenShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
277 int blueShift = data.palette.blueShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
278 int blueMask = data.palette.blueMask;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
279
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
280 for (int y = 0; y < height; y++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
281
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
282 int filter = 0;
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
283 os.write(filter);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
284
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
285 data.getPixels(0, y, width, lineData, 0);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
286
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
287 if (colorType is 6) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
288 data.getAlphas(0, y, width, alphaData, 0);
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
289 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
290
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
291 for (int x = 0; x < lineData.length; x++) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
292
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
293 int pixel = lineData[x];
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
294
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
295 int r = pixel & redMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
296 r = (redShift < 0) ? r >>> -redShift : r << redShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
297 int g = pixel & greenMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
298 g = (greenShift < 0) ? g >>> -greenShift : g << greenShift;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
299 int b = pixel & blueMask;
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
300 b = (blueShift < 0) ? b >>> -blueShift : b << blueShift;
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
301
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
302 os.write(r);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
303 os.write(g);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
304 os.write(b);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
305
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
306 if (colorType is 6) {
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
307 os.write(alphaData[x]);
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
308 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
309
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
310 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
311
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
312 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
313
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
314 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
315
240
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
316 os.flush();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
317 os.close();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
318
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
319 byte[] compressed = baos.toByteArray();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
320 if (os is baos) {
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
321 PngDeflater deflater = new PngDeflater();
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
322 compressed = deflater.deflate(compressed);
ce446666f5a2 Update to SWT 3.4M7
Frank Benoit <benoit@tionex.de>
parents: 131
diff changeset
323 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
324
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
325 writeChunk(TAG_IDAT, compressed);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
326
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
327 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
328
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
329 void writeEnd() {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
330
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
331 writeChunk(TAG_IEND, null);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
332
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
333 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
334
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
335 public void encode(LEDataOutputStream outputStream) {
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
336
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
337 try {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
338
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
339 writeSignature();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
340 writeHeader();
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
341
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
342 if (colorType is 3) {
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
343 writePalette();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
344 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
345
131
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
346 bool transparencyAlpha = (transparencyType is DWT.TRANSPARENCY_ALPHA);
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
347 bool transparencyPixel = (transparencyType is DWT.TRANSPARENCY_PIXEL);
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
348 bool type2Transparency = (colorType is 2 && transparencyPixel);
ee2998e3cfaa replace == and !=
Frank Benoit <benoit@tionex.de>
parents: 108
diff changeset
349 bool type3Transparency = (colorType is 3 && (transparencyAlpha || transparencyPixel));
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
350
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
351 if (type2Transparency || type3Transparency) {
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
352 writeTransparency();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
353 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
354
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
355 writeImageData();
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
356 writeEnd();
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
357
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
358 outputStream.write(bytes.toByteArray());
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
359
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
360 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
361
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
362 catch (IOException e) {
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
363
71
295b29fc7d13 Renamed SWT to DWT
Frank Benoit <benoit@tionex.de>
parents: 59
diff changeset
364 DWT.error(DWT.ERROR_IO, e);
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
365
59
8cec8f536af3 All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents: 55
diff changeset
366 }
14
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
367
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
368 }
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
369
7b1ca4eb5763 file format png
Frank Benoit <benoit@tionex.de>
parents:
diff changeset
370 }