1 17 18 19 20 package org.apache.fop.render.afp.modca; 21 import java.io.IOException ; 22 import java.io.OutputStream ; 23 import org.apache.fop.render.afp.tools.BinaryUtils; 24 25 27 public class ImageContent extends AbstractAFPObject { 28 29 32 private ImageSizeParameter _imageSizeParameter = null; 33 34 37 private byte _encoding = 0x03; 38 39 42 private byte _size = 1; 43 44 47 private byte _compression = (byte)0xC0; 48 49 52 private byte _colorModel = 0x01; 53 54 57 private byte _data[] = null; 58 59 62 public ImageContent() { 63 64 } 65 66 74 public void setImageSize(int hresol, int vresol, int hsize, int vsize) { 75 _imageSizeParameter = new ImageSizeParameter(hresol, vresol, hsize, vsize); 76 } 77 78 82 public void setImageEncoding(byte encoding) { 83 _encoding = encoding; 84 } 85 86 90 public void setImageCompression(byte compression) { 91 _compression = compression; 92 } 93 94 98 public void setImageIDESize(byte size) { 99 _size = size; 100 } 101 102 106 public void setImageIDEColorModel(byte colorModel) { 107 _colorModel = colorModel; 108 } 109 110 113 public void setImageData(byte data[]) { 114 _data = data; 115 } 116 117 122 public void writeDataStream(OutputStream os) 123 throws IOException { 124 125 writeStart(os); 126 127 if (_imageSizeParameter != null) { 128 _imageSizeParameter.writeDataStream(os); 129 } 130 131 os.write(getImageEncodingParameter()); 132 133 os.write(getImageIDESizeParameter()); 134 135 os.write(getIDEStructureParameter()); 136 137 os.write(getExternalAlgorithmParameter()); 138 139 if (_data != null) { 140 int off = 0; 141 while (off < _data.length) { 142 int len = Math.min(30000, _data.length - off); 143 os.write(getImageDataStart(len)); 144 os.write(_data, off, len); 145 off += len; 146 } 147 } 148 149 writeEnd(os); 150 151 } 152 153 157 private void writeStart(OutputStream os) 158 throws IOException { 159 160 byte[] data = new byte[] { 161 (byte)0x91, 0x01, (byte)0xff, }; 165 166 os.write(data); 167 168 } 169 170 174 private void writeEnd(OutputStream os) 175 throws IOException { 176 177 byte[] data = new byte[] { 178 (byte)0x93, 0x00, }; 181 182 os.write(data); 183 184 } 185 186 190 private byte[] getImageDataStart(int len) { 191 192 byte[] data = new byte[] { 193 (byte)0xFE, (byte)0x92, 0x00, 0x00, }; 198 199 byte[] l = BinaryUtils.convert(len, 2); 200 data[2] = l[0]; 201 data[3] = l[1]; 202 203 204 return data; 205 206 } 207 208 212 private byte[] getImageEncodingParameter() { 213 214 byte[] data = new byte[] { 215 (byte)0x95, 0x02, _encoding, 218 0x01, }; 220 221 return data; 222 223 } 224 225 229 private byte[] getExternalAlgorithmParameter() { 230 231 if (_encoding == (byte)0x83 && _compression != 0) { 232 byte[] data = new byte[] { 233 (byte)0x95, 0x00, 0x10, 0x00, (byte)0x83, 0x00, 0x00, 0x00, _compression, 0x00, 0x00, 0x00, }; 246 data[1] = (byte)(data.length - 2); 247 return data; 248 } 249 return new byte[0]; 250 } 251 252 256 private byte[] getImageIDESizeParameter() { 257 258 byte[] data = new byte[] { 259 (byte)0x96, 0x01, _size, 262 }; 263 264 return data; 265 266 } 267 268 272 private byte[] getIDEStructureParameter() { 273 274 if (_colorModel != 0 && _size == 24) { 275 byte bits = (byte)(_size / 3); 276 byte[] data = new byte[] { 277 (byte)0x9B, 0x00, 0x00, 0x00, _colorModel, 0x00, 0x00, 0x00, bits, 286 bits, 287 bits, 288 }; 289 data[1] = (byte)(data.length - 2); 290 return data; 291 } 292 return new byte[0]; 293 } 294 295 } 296 | Popular Tags |