blob: 3b1dafeea320101c1fdd19211753aa070a16df9a [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/* $Id$ */
package org.apache.fop.afp.goca;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.afp.util.BinaryUtils;
/**
* A GOCA Image
*/
public class GraphicsImage extends AbstractGraphicsDrawingOrder {
/** the maximum image data length */
public static final short MAX_DATA_LEN = 255;
/** x coordinate */
private final int x;
/** y coordinate */
private final int y;
/** width */
private final int width;
/** height */
private final int height;
/** image data */
private final byte[] imageData;
/**
* Main constructor
*
* @param x the x coordinate of the image
* @param y the y coordinate of the image
* @param width the image width
* @param height the image height
* @param imageData the image data
*/
public GraphicsImage(int x, int y, int width, int height, byte[] imageData) {
this.x = x;
this.y = y;
this.width = width;
this.height = height;
this.imageData = imageData;
}
/** {@inheritDoc} */
public int getDataLength() {
//TODO:
return 0;
}
byte getOrderCode() {
return (byte)0xD1;
}
/** {@inheritDoc} */
public void writeToStream(OutputStream os) throws IOException {
byte[] xcoord = BinaryUtils.convert(x, 2);
byte[] ycoord = BinaryUtils.convert(y, 2);
byte[] w = BinaryUtils.convert(width, 2);
byte[] h = BinaryUtils.convert(height, 2);
byte[] startData = new byte[] {
getOrderCode(), // GBIMG order code
(byte) 0x0A, // LENGTH
xcoord[0],
xcoord[1],
ycoord[0],
ycoord[1],
0x00, // FORMAT
0x00, // RES
w[0], // WIDTH
w[1], //
h[0], // HEIGHT
h[1] //
};
os.write(startData);
byte[] dataHeader = new byte[] {
(byte) 0x92 // GIMD
};
final int lengthOffset = 1;
writeChunksToStream(imageData, dataHeader, lengthOffset, MAX_DATA_LEN, os);
byte[] endData = new byte[] {
(byte) 0x93, // GEIMG order code
0x00 // LENGTH
};
os.write(endData);
}
/** {@inheritDoc} */
public String toString() {
return "GraphicsImage{x=" + x
+ ", y=" + y
+ ", width=" + width
+ ", height=" + height
+ "}";
}
}