Mercurial > projects > dwt-linux
annotate dwt/internal/image/PNGFileFormat.d @ 240:ce446666f5a2
Update to SWT 3.4M7
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Mon, 12 May 2008 19:13:01 +0200 |
parents | 08789b28bdf3 |
children | c0d810de7093 |
rev | line source |
---|---|
134
116d23207a86
changed PNG loader to use internal inflating
Frank Benoit <benoit@tionex.de>
parents:
131
diff
changeset
|
1 /******************************************************************************* |
14 | 2 * Copyright (c) 2000, 2006 IBM Corporation and others. |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
108 | 10 * Port to the D programming language: |
11 * Frank Benoit <benoit@tionex.de> | |
14 | 12 *******************************************************************************/ |
13 module dwt.internal.image.PNGFileFormat; | |
14 | |
15 | |
71 | 16 import dwt.DWT; |
14 | 17 import dwt.graphics.ImageData; |
18 import dwt.graphics.ImageLoaderEvent; | |
19 import dwt.graphics.ImageLoader; | |
20 import dwt.graphics.PaletteData; | |
21 import dwt.internal.Compatibility; | |
22 import dwt.internal.image.FileFormat; | |
23 import dwt.internal.image.PngIhdrChunk; | |
24 import dwt.internal.image.PngPlteChunk; | |
25 import dwt.internal.image.PngChunkReader; | |
26 import dwt.internal.image.PngChunk; | |
27 import dwt.internal.image.PngTrnsChunk; | |
28 import dwt.internal.image.PngIdatChunk; | |
29 import dwt.internal.image.PngEncoder; | |
30 import dwt.internal.image.PngInputStream; | |
31 import dwt.internal.image.PngDecodingDataStream; | |
200
08789b28bdf3
import dwt.dwthelper.utils now explicit
Frank Benoit <benoit@tionex.de>
parents:
152
diff
changeset
|
32 import dwt.dwthelper.utils; |
14 | 33 |
34 import dwt.dwthelper.BufferedInputStream; | |
35 | |
36 import tango.core.Exception; | |
37 | |
38 final class PNGFileFormat : FileFormat { | |
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
|
39 static final int SIGNATURE_LENGTH = 8; |
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 static final int PRIME = 65521; |
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 PngIhdrChunk headerChunk; |
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 PngPlteChunk paletteChunk; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
43 ImageData imageData; |
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 byte[] 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
|
45 byte[] alphaPalette; |
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 byte headerByte1; |
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 byte headerByte2; |
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 adler; |
14 | 49 |
50 /** | |
51 * Skip over signature data. This has already been | |
52 * verified in isFileFormat(). | |
53 */ | |
54 void readSignature() { | |
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
|
55 byte[] signature = new byte[SIGNATURE_LENGTH]; |
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 inputStream.read(signature); |
14 | 57 } |
58 /** | |
59 * Load the PNG image from the byte stream. | |
60 */ | |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
135
diff
changeset
|
61 override ImageData[] loadFromByteStream() { |
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
|
62 try { |
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 readSignature(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
64 PngChunkReader chunkReader = new PngChunkReader(inputStream); |
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 headerChunk = chunkReader.getIhdrChunk(); |
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 int width = headerChunk.getWidth(), height = headerChunk.getHeight(); |
71 | 67 if (width <= 0 || height <= 0) DWT.error(DWT.ERROR_INVALID_IMAGE); |
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
|
68 int imageSize = getAlignedBytesPerRow() * 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
|
69 data = new byte[imageSize]; |
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 imageData = ImageData.internal_new( |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
71 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
|
72 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
|
73 headerChunk.getSwtBitsPerPixel(), |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
74 new PaletteData(0, 0, 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
|
75 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
|
76 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
|
77 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
|
78 null, |
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 null, |
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 -1, |
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 -1, |
71 | 82 DWT.IMAGE_PNG, |
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
|
83 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
|
84 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
|
85 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
|
86 0); |
14 | 87 |
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
|
88 if (headerChunk.usesDirectColor()) { |
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 imageData.palette = headerChunk.getPaletteData(); |
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 } |
14 | 91 |
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
|
92 // Read and process chunks until the IEND chunk is encountered. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
93 while (chunkReader.hasMoreChunks()) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
94 readNextChunk(chunkReader); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
95 } |
14 | 96 |
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
|
97 return [imageData]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
98 } catch (IOException e) { |
71 | 99 DWT.error(DWT.ERROR_INVALID_IMAGE); |
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 return null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
101 } |
14 | 102 } |
103 /** | |
104 * Read and handle the next chunk of data from the | |
105 * PNG file. | |
106 */ | |
107 void readNextChunk(PngChunkReader chunkReader) { | |
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
|
108 PngChunk chunk = chunkReader.readNextChunk(); |
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 switch (chunk.getChunkType()) { |
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 case PngChunk.CHUNK_IEND: |
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 break; |
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 case PngChunk.CHUNK_PLTE: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
113 if (!headerChunk.usesDirectColor()) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
114 paletteChunk = cast(PngPlteChunk) chunk; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
115 imageData.palette = paletteChunk.getPaletteData(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
116 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
117 break; |
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 case PngChunk.CHUNK_tRNS: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
119 PngTrnsChunk trnsChunk = cast(PngTrnsChunk) chunk; |
131 | 120 if (trnsChunk.getTransparencyType(headerChunk) is |
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
|
121 PngTrnsChunk.TRANSPARENCY_TYPE_PIXEL) |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
122 { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
123 imageData.transparentPixel = |
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 trnsChunk.getSwtTransparentPixel(headerChunk); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
125 } 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
|
126 alphaPalette = trnsChunk.getAlphaValues(headerChunk, paletteChunk); |
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 int transparentCount = 0, transparentPixel = -1; |
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 for (int i = 0; i < alphaPalette.length; i++) { |
131 | 129 if ((alphaPalette[i] & 0xFF) !is 255) { |
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
|
130 transparentCount++; |
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 transparentPixel = i; |
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 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
133 } |
131 | 134 if (transparentCount 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
|
135 alphaPalette = null; |
131 | 136 } else if (transparentCount is 1 && alphaPalette[transparentPixel] 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
|
137 alphaPalette = null; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
138 imageData.transparentPixel = transparentPixel; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
139 } |
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 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
141 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
142 case PngChunk.CHUNK_IDAT: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
143 if (chunkReader.readPixelData()) { |
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 // All IDAT chunks in an image file must be |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
145 // sequential. If the pixel data has already |
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 // been read and another IDAT block is encountered, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
147 // then this is an invalid image. |
71 | 148 DWT.error(DWT.ERROR_INVALID_IMAGE); |
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
|
149 } 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
|
150 // Read in the pixel data for the image. This should |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
151 // go through all the image's IDAT chunks. |
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 PngIdatChunk dataChunk = cast(PngIdatChunk) chunk; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
153 readPixelData(dataChunk, chunkReader); |
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 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
155 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
156 default: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
157 if (chunk.isCritical()) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
158 // All critical chunks must be supported. |
71 | 159 DWT.error(DWT.ERROR_NOT_IMPLEMENTED); |
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 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
161 } |
14 | 162 } |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
135
diff
changeset
|
163 override void unloadIntoByteStream(ImageLoader loader) { |
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
|
164 PngEncoder encoder = new PngEncoder(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
|
165 encoder.encode(outputStream); |
14 | 166 } |
152
17f8449522fd
overloads second walkthrough
Frank Benoit <benoit@tionex.de>
parents:
135
diff
changeset
|
167 override bool isFileFormat(LEDataInputStream stream) { |
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 try { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
169 byte[] signature = new byte[SIGNATURE_LENGTH]; |
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 stream.read(signature); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
171 stream.unread(signature); |
131 | 172 if ((signature[0] & 0xFF) !is 137) return false; //137 |
173 if ((signature[1] & 0xFF) !is 80) return false; //P | |
174 if ((signature[2] & 0xFF) !is 78) return false; //N | |
175 if ((signature[3] & 0xFF) !is 71) return false; //G | |
176 if ((signature[4] & 0xFF) !is 13) return false; //<RETURN> | |
177 if ((signature[5] & 0xFF) !is 10) return false; //<LINEFEED> | |
178 if ((signature[6] & 0xFF) !is 26) return false; //<CTRL/Z> | |
240 | 179 if ((signature[7] & 0xFF) !is 10) return false; //<LINEFEED> |
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
|
180 return true; |
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 } catch (Exception 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
|
182 return false; |
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 } |
14 | 184 } |
185 /** | |
71 | 186 * DWT does not support 16-bit depths. If this image uses |
14 | 187 * 16-bit depths, convert the data to an 8-bit depth. |
188 */ | |
189 byte[] validateBitDepth(byte[] data) { | |
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
|
190 if (headerChunk.getBitDepth() > 8) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
191 byte[] result = new byte[data.length / 2]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
192 compress16BitDepthTo8BitDepth(data, 0, result, 0, result.length); |
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 return result; |
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 } 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
|
195 return 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
|
196 } |
14 | 197 } |
198 /** | |
71 | 199 * DWT does not support greyscale as a color type. For |
14 | 200 * plain grayscale, we create a palette. For Grayscale |
201 * with Alpha, however, we need to convert the pixels | |
202 * to use RGB values. | |
203 * Note: This method assumes that the bit depth of the | |
204 * data has already been restricted to 8 or less. | |
205 */ | |
206 void setPixelData(byte[] data, ImageData imageData) { | |
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 switch (headerChunk.getColorType()) { |
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 case PngIhdrChunk.COLOR_TYPE_GRAYSCALE_WITH_ALPHA: |
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 { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
210 int width = imageData.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
|
211 int height = imageData.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
|
212 int destBytesPerLine = imageData.bytesPerLine; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
213 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
214 * If the image uses 16-bit depth, it is converted |
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 * to an 8-bit depth image. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
216 */ |
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 int srcBytesPerLine = getAlignedBytesPerRow(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
218 if (headerChunk.getBitDepth() > 8) srcBytesPerLine /= 2; |
14 | 219 |
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
|
220 byte[] rgbData = new byte[destBytesPerLine * 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
|
221 byte[] alphaData = new byte[width * 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
|
222 for (int y = 0; y < height; 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
|
223 int srcIndex = srcBytesPerLine * 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
|
224 int destIndex = destBytesPerLine * 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
|
225 int destAlphaIndex = width * 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
|
226 for (int x = 0; x < width; x++) { |
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 byte grey = data[srcIndex]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
228 byte alpha = data[srcIndex + 1]; |
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 rgbData[destIndex + 0] = grey; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
230 rgbData[destIndex + 1] = grey; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
231 rgbData[destIndex + 2] = grey; |
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 alphaData[destAlphaIndex] = alpha; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
233 srcIndex += 2; |
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 destIndex += 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
|
235 destAlphaIndex++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
236 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
237 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
238 imageData.data = rgbData; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
239 imageData.alphaData = alphaData; |
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 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
241 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
242 case PngIhdrChunk.COLOR_TYPE_RGB_WITH_ALPHA: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
243 { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
244 int width = imageData.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
|
245 int height = imageData.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
|
246 int destBytesPerLine = imageData.bytesPerLine; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
247 int srcBytesPerLine = getAlignedBytesPerRow(); |
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 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
249 * If the image uses 16-bit depth, it is converted |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
250 * to an 8-bit depth image. |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
251 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
252 if (headerChunk.getBitDepth() > 8) srcBytesPerLine /= 2; |
14 | 253 |
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
|
254 byte[] rgbData = new byte[destBytesPerLine * 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
|
255 byte[] alphaData = new byte[width * 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
|
256 for (int y = 0; y < height; 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
|
257 int srcIndex = srcBytesPerLine * 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
|
258 int destIndex = destBytesPerLine * 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
|
259 int destAlphaIndex = width * 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
|
260 for (int x = 0; x < width; x++) { |
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 rgbData[destIndex + 0] = data[srcIndex + 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
|
262 rgbData[destIndex + 1] = data[srcIndex + 1]; |
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 rgbData[destIndex + 2] = data[srcIndex + 2]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
264 alphaData[destAlphaIndex] = data[srcIndex + 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
|
265 srcIndex += 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
|
266 destIndex += 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
|
267 destAlphaIndex++; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
268 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
269 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
270 imageData.data = rgbData; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
271 imageData.alphaData = alphaData; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
272 break; |
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 } |
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 case PngIhdrChunk.COLOR_TYPE_RGB: |
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 imageData.data = 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
|
276 break; |
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 case PngIhdrChunk.COLOR_TYPE_PALETTE: |
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 imageData.data = data; |
131 | 279 if (alphaPalette !is null) { |
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 int size = imageData.width * imageData.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
|
281 byte[] alphaData = new byte[size]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
282 byte[] pixelData = new byte[size]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
283 imageData.getPixels(0, 0, size, pixelData, 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
|
284 for (int i = 0; i < pixelData.length; i++) { |
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 alphaData[i] = alphaPalette[pixelData[i] & 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
|
286 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
287 imageData.alphaData = alphaData; |
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 } |
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 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
290 default: |
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 imageData.data = 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
|
292 break; |
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 } |
14 | 294 } |
295 /** | |
296 * PNG supports some color types and bit depths that are | |
71 | 297 * unsupported by DWT. If the image uses an unsupported |
14 | 298 * color type (either of the gray scale types) or bit |
71 | 299 * depth (16), convert the data to an DWT-supported |
14 | 300 * format. Then assign the data into the ImageData given. |
301 */ | |
302 void setImageDataValues(byte[] data, ImageData imageData) { | |
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
|
303 byte[] result = validateBitDepth(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
|
304 setPixelData(result, imageData); |
14 | 305 } |
306 /** | |
307 * Read the image data from the data stream. This must handle | |
308 * decoding the data, filtering, and interlacing. | |
309 */ | |
310 void readPixelData(PngIdatChunk chunk, PngChunkReader chunkReader) { | |
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
|
311 InputStream stream = new PngInputStream(chunk, chunkReader); |
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 //TEMPORARY CODE |
14 | 313 //PORTING_FIXME |
135
311ea7977d1f
changed PNG loader to use internal inflating
Frank Benoit <benoit@tionex.de>
parents:
134
diff
changeset
|
314 bool use3_2 = true;//System.getProperty("dwt.internal.image.PNGFileFormat_3.2") !is null; |
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
|
315 InputStream inflaterStream = use3_2 ? null : Compatibility.newInflaterInputStream(stream); |
131 | 316 if (inflaterStream !is null) { |
240 | 317 stream = inflaterStream; |
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
|
318 } 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
|
319 stream = new PngDecodingDataStream(stream); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
320 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
321 int interlaceMethod = headerChunk.getInterlaceMethod(); |
131 | 322 if (interlaceMethod is PngIhdrChunk.INTERLACE_METHOD_NONE) { |
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
|
323 readNonInterlacedImage(stream); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
324 } 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
|
325 readInterlacedImage(stream); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
326 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
327 /* |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
328 * InflaterInputStream does not consume all bytes in the stream |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
329 * when it is closed. This may leave unread IDAT chunks. The fix |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
330 * is to read all available bytes before closing it. |
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 */ |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
332 while (stream.available() > 0) stream.read(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
333 stream.close(); |
14 | 334 } |
335 /** | |
336 * Answer the number of bytes in a word-aligned row of pixel data. | |
337 */ | |
338 int getAlignedBytesPerRow() { | |
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 return ((getBytesPerRow(headerChunk.getWidth()) + 3) / 4) * 4; |
14 | 340 } |
341 /** | |
342 * Answer the number of bytes in each row of the image | |
343 * data. Each PNG row is byte-aligned, so images with bit | |
344 * depths less than a byte may have unused bits at the | |
345 * end of each row. The value of these bits is undefined. | |
346 */ | |
347 int getBytesPerRow() { | |
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
|
348 return getBytesPerRow(headerChunk.getWidth()); |
14 | 349 } |
350 /** | |
351 * Answer the number of bytes needed to represent a pixel. | |
352 * This value depends on the image's color type and bit | |
353 * depth. | |
354 * Note that this method rounds up if an image's pixel size | |
355 * isn't byte-aligned. | |
356 */ | |
357 int getBytesPerPixel() { | |
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 int bitsPerPixel = headerChunk.getBitsPerPixel(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
359 return (bitsPerPixel + 7) / 8; |
14 | 360 } |
361 /** | |
362 * Answer the number of bytes in a row of the given pixel | |
363 * width. Each row is byte-aligned, so images with bit | |
364 * depths less than a byte may have unused bits at the | |
365 * end of each row. The value of these bits is undefined. | |
366 */ | |
367 int getBytesPerRow(int rowWidthInPixels) { | |
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
|
368 int bitsPerPixel = headerChunk.getBitsPerPixel(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
369 int bitsPerRow = bitsPerPixel * rowWidthInPixels; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
370 int bitsPerByte = 8; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
371 return (bitsPerRow + (bitsPerByte - 1)) / bitsPerByte; |
14 | 372 } |
373 /** | |
374 * 1. Read one of the seven frames of interlaced data. | |
375 * 2. Update the imageData. | |
376 * 3. Notify the image loader's listeners of the frame load. | |
377 */ | |
378 void readInterlaceFrame( | |
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
|
379 InputStream inputStream, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
380 int rowInterval, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
381 int columnInterval, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
382 int startRow, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
383 int startColumn, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
384 int frameCount) |
14 | 385 { |
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
|
386 int width = headerChunk.getWidth(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
387 int alignedBytesPerRow = getAlignedBytesPerRow(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
388 int height = headerChunk.getHeight(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
389 if (startRow >= height || startColumn >= width) return; |
14 | 390 |
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
|
391 int pixelsPerRow = (width - startColumn + columnInterval - 1) / columnInterval; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
392 int bytesPerRow = getBytesPerRow(pixelsPerRow); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
393 byte[] row1 = new byte[bytesPerRow]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
394 byte[] row2 = new byte[bytesPerRow]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
395 byte[] currentRow = row1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
396 byte[] lastRow = row2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
397 for (int row = startRow; row < height; row += rowInterval) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
398 byte filterType = cast(byte)inputStream.read(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
399 int read = 0; |
131 | 400 while (read !is bytesPerRow) { |
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
|
401 read += inputStream.read(currentRow, read, bytesPerRow - read); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
402 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
403 filterRow(currentRow, lastRow, filterType); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
404 if (headerChunk.getBitDepth() >= 8) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
405 int bytesPerPixel = getBytesPerPixel(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
406 int dataOffset = (row * alignedBytesPerRow) + (startColumn * bytesPerPixel); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
407 for (int rowOffset = 0; rowOffset < currentRow.length; rowOffset += bytesPerPixel) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
408 for (int byteOffset = 0; byteOffset < bytesPerPixel; byteOffset++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
409 data[dataOffset + byteOffset] = currentRow[rowOffset + byteOffset]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
410 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
411 dataOffset += (columnInterval * bytesPerPixel); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
412 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
413 } 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
|
414 int bitsPerPixel = headerChunk.getBitDepth(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
415 int pixelsPerByte = 8 / bitsPerPixel; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
416 int column = startColumn; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
417 int rowBase = row * alignedBytesPerRow; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
418 int valueMask = 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
|
419 for (int i = 0; i < bitsPerPixel; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
420 valueMask <<= 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
421 valueMask |= 1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
422 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
423 int maxShift = 8 - bitsPerPixel; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
424 for (int byteOffset = 0; byteOffset < currentRow.length; byteOffset++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
425 for (int bitOffset = maxShift; bitOffset >= 0; bitOffset -= bitsPerPixel) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
426 if (column < 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
|
427 int dataOffset = rowBase + (column * bitsPerPixel / 8); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
428 int value = (currentRow[byteOffset] >> bitOffset) & valueMask; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
429 int dataShift = maxShift - (bitsPerPixel * (column % pixelsPerByte)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
430 data[dataOffset] |= value << dataShift; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
431 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
432 column += columnInterval; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
433 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
434 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
435 } |
131 | 436 currentRow = (currentRow is row1) ? row2 : row1; |
437 lastRow = (lastRow is row1) ? row2 : row1; | |
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
|
438 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
439 setImageDataValues(data, imageData); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
440 fireInterlacedFrameEvent(frameCount); |
14 | 441 } |
442 /** | |
443 * Read the pixel data for an interlaced image from the | |
444 * data stream. | |
445 */ | |
446 void readInterlacedImage(InputStream inputStream) { | |
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
|
447 readInterlaceFrame(inputStream, 8, 8, 0, 0, 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
|
448 readInterlaceFrame(inputStream, 8, 8, 0, 4, 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
449 readInterlaceFrame(inputStream, 8, 4, 4, 0, 2); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
450 readInterlaceFrame(inputStream, 4, 4, 0, 2, 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
|
451 readInterlaceFrame(inputStream, 4, 2, 2, 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
|
452 readInterlaceFrame(inputStream, 2, 2, 0, 1, 5); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
453 readInterlaceFrame(inputStream, 2, 1, 1, 0, 6); |
14 | 454 } |
455 /** | |
456 * Fire an event to let listeners know that an interlaced | |
457 * frame has been loaded. | |
458 * finalFrame should be true if the image has finished | |
459 * loading, false if there are more frames to come. | |
460 */ | |
461 void fireInterlacedFrameEvent(int frameCount) { | |
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
|
462 if (loader.hasListeners()) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
463 ImageData image = cast(ImageData) imageData.clone(); |
131 | 464 bool finalFrame = frameCount 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
|
465 loader.notifyListeners(new ImageLoaderEvent(loader, image, frameCount, finalFrame)); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
466 } |
14 | 467 } |
468 /** | |
469 * Read the pixel data for a non-interlaced image from the | |
470 * data stream. | |
471 * Update the imageData to reflect the new data. | |
472 */ | |
473 void readNonInterlacedImage(InputStream inputStream) { | |
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
|
474 int dataOffset = 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
|
475 int alignedBytesPerRow = getAlignedBytesPerRow(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
476 int bytesPerRow = getBytesPerRow(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
477 byte[] row1 = new byte[bytesPerRow]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
478 byte[] row2 = new byte[bytesPerRow]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
479 byte[] currentRow = row1; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
480 byte[] lastRow = row2; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
481 int height = headerChunk.getHeight(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
482 for (int row = 0; row < height; row++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
483 byte filterType = cast(byte)inputStream.read(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
484 int read = 0; |
131 | 485 while (read !is bytesPerRow) { |
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
|
486 read += inputStream.read(currentRow, read, bytesPerRow - read); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
487 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
488 filterRow(currentRow, lastRow, filterType); |
25
fc2b263b8a3f
Merged back the System.arraycopy and use a System class
Frank Benoit <benoit@tionex.de>
parents:
14
diff
changeset
|
489 System.arraycopy(currentRow, 0, data, dataOffset, bytesPerRow); |
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
|
490 dataOffset += alignedBytesPerRow; |
131 | 491 currentRow = (currentRow is row1) ? row2 : row1; |
492 lastRow = (lastRow is row1) ? row2 : row1; | |
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
|
493 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
494 setImageDataValues(data, imageData); |
14 | 495 } |
496 /** | |
71 | 497 * DWT does not support 16-bit depth color formats. |
14 | 498 * Convert the 16-bit data to 8-bit data. |
499 * The correct way to do this is to multiply each | |
500 * 16 bit value by the value: | |
501 * (2^8 - 1) / (2^16 - 1). | |
502 * The fast way to do this is just to drop the low | |
503 * byte of the 16-bit value. | |
504 */ | |
505 static void compress16BitDepthTo8BitDepth( | |
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
|
506 byte[] source, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
507 int sourceOffset, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
508 byte[] destination, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
509 int destinationOffset, |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
510 int numberOfValues) |
14 | 511 { |
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
|
512 //double multiplier = (Compatibility.pow2(8) - 1) / (Compatibility.pow2(16) - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
513 for (int i = 0; i < numberOfValues; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
514 int sourceIndex = sourceOffset + (2 * i); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
515 int destinationIndex = destinationOffset + i; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
516 //int value = (source[sourceIndex] << 8) | source[sourceIndex + 1]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
517 //byte compressedValue = (byte)(value * multiplier); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
518 byte compressedValue = source[sourceIndex]; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
519 destination[destinationIndex] = compressedValue; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
520 } |
14 | 521 } |
522 /** | |
71 | 523 * DWT does not support 16-bit depth color formats. |
14 | 524 * Convert the 16-bit data to 8-bit data. |
525 * The correct way to do this is to multiply each | |
526 * 16 bit value by the value: | |
527 * (2^8 - 1) / (2^16 - 1). | |
528 * The fast way to do this is just to drop the low | |
529 * byte of the 16-bit value. | |
530 */ | |
531 static int compress16BitDepthTo8BitDepth(int value) { | |
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
|
532 //double multiplier = (Compatibility.pow2(8) - 1) / (Compatibility.pow2(16) - 1); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
533 //byte compressedValue = (byte)(value * multiplier); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
534 return value >> 8; |
14 | 535 } |
536 /** | |
537 * PNG supports four filtering types. These types are applied | |
538 * per row of image data. This method unfilters the given row | |
539 * based on the filterType. | |
540 */ | |
541 void filterRow(byte[] row, byte[] previousRow, int filterType) { | |
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
|
542 int byteOffset = headerChunk.getFilterByteOffset(); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
543 switch (filterType) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
544 case PngIhdrChunk.FILTER_NONE: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
545 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
546 case PngIhdrChunk.FILTER_SUB: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
547 for (int i = byteOffset; i < row.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
548 int current = row[i] & 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
|
549 int left = row[i - byteOffset] & 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
|
550 row[i] = cast(byte)((current + left) & 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
|
551 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
552 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
553 case PngIhdrChunk.FILTER_UP: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
554 for (int i = 0; i < row.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
555 int current = row[i] & 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
|
556 int above = previousRow[i] & 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
|
557 row[i] = cast(byte)((current + above) & 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
|
558 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
559 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
560 case PngIhdrChunk.FILTER_AVERAGE: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
561 for (int i = 0; i < row.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
562 int left = (i < byteOffset) ? 0 : row[i - byteOffset] & 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
|
563 int above = previousRow[i] & 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
|
564 int current = row[i] & 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
|
565 row[i] = cast(byte)((current + ((left + above) / 2)) & 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
|
566 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
567 break; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
568 case PngIhdrChunk.FILTER_PAETH: |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
569 for (int i = 0; i < row.length; i++) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
570 int left = (i < byteOffset) ? 0 : row[i - byteOffset] & 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
|
571 int aboveLeft = (i < byteOffset) ? 0 : previousRow[i - byteOffset] & 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
|
572 int above = previousRow[i] & 0xFF; |
14 | 573 |
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
|
574 int a = Math.abs(above - aboveLeft); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
575 int b = Math.abs(left - aboveLeft); |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
576 int c = Math.abs(left - aboveLeft + above - aboveLeft); |
14 | 577 |
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
|
578 int preductor = 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
|
579 if (a <= b && a <= c) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
580 preductor = left; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
581 } else if (b <= c) { |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
582 preductor = above; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
583 } 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
|
584 preductor = aboveLeft; |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
585 } |
14 | 586 |
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
|
587 int currentValue = row[i] & 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
|
588 row[i] = cast(byte) ((currentValue + preductor) & 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
|
589 } |
8cec8f536af3
All D sources complete gvim retab (4 spaces), bug with Composite moveAbove/moveBelow fixed.
Frank Benoit <benoit@tionex.de>
parents:
55
diff
changeset
|
590 break; |
55
93981635e709
Checked and inserted missing default switch cases.
Frank Benoit <benoit@tionex.de>
parents:
25
diff
changeset
|
591 default: |
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
|
592 } |
14 | 593 } |
594 | |
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
|
595 } |