1 17 18 19 20 package org.apache.fop.render.afp.modca; 21 22 import java.io.ByteArrayOutputStream ; 23 import java.io.IOException ; 24 import java.io.OutputStream ; 25 import java.io.UnsupportedEncodingException ; 26 import org.apache.fop.render.afp.tools.BinaryUtils; 27 28 31 public class ImageObject extends AbstractNamedAFPObject { 32 33 36 private ObjectEnvironmentGroup _objectEnvironmentGroup = null; 37 38 41 private ImageSegment _imageSegment = null; 42 43 48 public ImageObject(String name) { 49 50 super(name); 51 52 } 53 54 68 public void setImageViewport(int x, int y, int w, int h, int r) { 69 if (_objectEnvironmentGroup == null) { 70 _objectEnvironmentGroup = new ObjectEnvironmentGroup(); 71 } 72 _objectEnvironmentGroup.setObjectArea(x, y, w, h, r); 73 } 74 75 82 public void setImageParameters(int xresol, int yresol, int width, int height) { 83 if (_objectEnvironmentGroup == null) { 84 _objectEnvironmentGroup = new ObjectEnvironmentGroup(); 85 } 86 _objectEnvironmentGroup.setImageData(xresol, yresol, width, height); 87 if (_imageSegment == null) { 88 _imageSegment = new ImageSegment(); 89 } 90 _imageSegment.setImageSize(xresol, yresol, width, height); 91 } 92 93 97 public void setImageEncoding(byte encoding) { 98 if (_imageSegment == null) { 99 _imageSegment = new ImageSegment(); 100 } 101 _imageSegment.setImageEncoding(encoding); 102 } 103 104 108 public void setImageCompression(byte compression) { 109 if (_imageSegment == null) { 110 _imageSegment = new ImageSegment(); 111 } 112 _imageSegment.setImageCompression(compression); 113 } 114 115 119 public void setImageIDESize(byte size) { 120 if (_imageSegment == null) { 121 _imageSegment = new ImageSegment(); 122 } 123 _imageSegment.setImageIDESize(size); 124 } 125 126 130 public void setImageIDEColorModel(byte colorModel) { 131 if (_imageSegment == null) { 132 _imageSegment = new ImageSegment(); 133 } 134 _imageSegment.setImageIDEColorModel(colorModel); 135 } 136 137 141 public void setImageData(byte data[]) { 142 if (_imageSegment == null) { 143 _imageSegment = new ImageSegment(); 144 } 145 _imageSegment.setImageData(data); 146 } 147 148 152 public void setObjectEnvironmentGroup(ObjectEnvironmentGroup objectEnvironmentGroup) { 153 _objectEnvironmentGroup = objectEnvironmentGroup; 154 } 155 156 160 private byte[] getIPDStart(int len) { 161 162 byte[] data = new byte[] { 163 164 0x5A, 0x00, 0x10, (byte) 0xD3, (byte) 0xEE, (byte) 0xFB, 0x00, 0x00, 0x00, }; 174 175 byte[] l = BinaryUtils.convert(len + 8, 2); 176 data[1] = l[0]; 177 data[2] = l[1]; 178 179 return data; 180 181 } 182 183 188 public void writeDataStream(OutputStream os) 189 throws IOException { 190 191 writeStart(os); 192 193 if (_objectEnvironmentGroup != null) { 194 _objectEnvironmentGroup.writeDataStream(os); 195 } 196 197 if (_imageSegment != null) { 198 ByteArrayOutputStream baos = new ByteArrayOutputStream (); 199 _imageSegment.writeDataStream(baos); 200 byte b[] = baos.toByteArray(); 201 int off = 0; 202 while (off < b.length) { 203 int len = Math.min(30000, b.length - off); 204 os.write(getIPDStart(len)); 205 os.write(b, off, len); 206 off += len; 207 } 208 } 209 210 writeEnd(os); 211 212 } 213 214 218 private void writeStart(OutputStream os) 219 throws IOException { 220 221 byte[] data = new byte[17]; 222 223 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA8; data[5] = (byte) 0xFB; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 233 for (int i = 0; i < _nameBytes.length; i++) { 234 235 data[9 + i] = _nameBytes[i]; 236 237 } 238 239 os.write(data); 240 241 } 242 243 247 private void writeEnd(OutputStream os) 248 throws IOException { 249 250 byte[] data = new byte[17]; 251 252 data[0] = 0x5A; data[1] = 0x00; data[2] = 0x10; data[3] = (byte) 0xD3; data[4] = (byte) 0xA9; data[5] = (byte) 0xFB; data[6] = 0x00; data[7] = 0x00; data[8] = 0x00; 262 for (int i = 0; i < _nameBytes.length; i++) { 263 264 data[9 + i] = _nameBytes[i]; 265 266 } 267 268 os.write(data); 269 270 } 271 272 } 273 | Popular Tags |