blob: 50f44d39db6d957a91dbea3d67001bcb446b5c71 [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.ioca;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.afp.modca.AbstractAFPObject;
import org.apache.fop.afp.util.BinaryUtils;
/**
* Contains the image points that define the IM image raster pattern.
*
* A raster pattern is the array of presentation device pels that forms
* the image. The image data is uncompressed. Bits are grouped into
* bytes and are ordered from left to right within each byte. Each bit
* in the image data represents an image point and is mapped to
* presentation device pels as specified in the IOC structured field.
* A bit with value B'1' indicates a significant image point; a bit
* with value B'0' indicates an insignificant image point.
* Image points are recorded from left to right in rows that represents
* scan lines (X direction), and rows representing scan lines are
* recorded from top to bottom (Y direction). When the image is
* presented, all image points in a row are presented before any
* image points in the next sequential row are presented, and all rows
* have the same number of image points. If the total number of image
* points is not a multiple of 8, the last byte of the image data is
* padded to a byte boundary. The padding bits do not represent image
* points and are ignored by presentation devices.
*/
public class ImageRasterData extends AbstractAFPObject {
/** the image raster data */
private final byte[] rasterData;
/**
* Constructor for the image raster data object
*
* @param data The raster image data
*/
public ImageRasterData(byte[] data) {
this.rasterData = data;
}
/** {@inheritDoc} */
public void writeToStream(OutputStream os) throws IOException {
byte[] data = new byte[9];
copySF(data, Type.DATA, Category.IM_IMAGE);
// The size of the structured field
byte[] len = BinaryUtils.convert(rasterData.length + 8, 2);
data[1] = len[0];
data[2] = len[1];
os.write(data);
os.write(rasterData);
}
}