You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ImageDataDescriptor.java 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements. See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License. You may obtain a copy of the License at
  8. *
  9. * http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. /* $Id$ */
  18. package org.apache.fop.afp.modca;
  19. import java.io.IOException;
  20. import java.io.OutputStream;
  21. import org.apache.fop.afp.util.BinaryUtils;
  22. /**
  23. * ImageDataDescriptor
  24. */
  25. public class ImageDataDescriptor extends AbstractDescriptor {
  26. /** function set fs10 */
  27. public static final byte FUNCTION_SET_FS10 = 0x0A;
  28. /** function set fs11 */
  29. public static final byte FUNCTION_SET_FS11 = 0x0B;
  30. /** function set fs45 */
  31. public static final byte FUNCTION_SET_FS45 = 45;
  32. private byte functionSet = FUNCTION_SET_FS11; // FCNSET = IOCA FS 11
  33. /**
  34. * Constructor for a ImageDataDescriptor for the specified
  35. * resolution, width and height.
  36. *
  37. * @param width The width of the image.
  38. * @param height The height of the height.
  39. * @param widthRes The horizontal resolution of the image.
  40. * @param heightRes The vertical resolution of the image.
  41. */
  42. public ImageDataDescriptor(int width, int height, int widthRes, int heightRes) {
  43. super(width, height, widthRes, heightRes);
  44. }
  45. /**
  46. * Sets the IOCA function set to be used.
  47. * @param functionSet the function set (0x0A for FS 10, 0x0B for FS 11, etc.)
  48. */
  49. public void setFunctionSet(byte functionSet) {
  50. this.functionSet = functionSet;
  51. }
  52. /** {@inheritDoc} */
  53. public void writeToStream(OutputStream os) throws IOException {
  54. byte[] data = new byte[22];
  55. copySF(data, Type.DESCRIPTOR, Category.IMAGE);
  56. // SF length
  57. byte[] len = BinaryUtils.convert(data.length - 1, 2);
  58. data[1] = len[0];
  59. data[2] = len[1];
  60. byte[] x = BinaryUtils.convert(widthRes, 2);
  61. data[10] = x[0];
  62. data[11] = x[1];
  63. byte[] y = BinaryUtils.convert(heightRes, 2);
  64. data[12] = y[0];
  65. data[13] = y[1];
  66. byte[] w = BinaryUtils.convert(width, 2);
  67. data[14] = w[0];
  68. data[15] = w[1];
  69. byte[] h = BinaryUtils.convert(height, 2);
  70. data[16] = h[0];
  71. data[17] = h[1];
  72. //IOCA Function Set Field
  73. data[18] = (byte)0xF7; // ID = Set IOCA Function Set
  74. data[19] = 0x02; // Length
  75. data[20] = 0x01; // Category = Function set identifier
  76. data[21] = functionSet;
  77. os.write(data);
  78. }
  79. }