blob: ac7af1dbdc89958d69907f342e1aad803c610259 [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.pdf;
import java.io.IOException;
import java.io.OutputStream;
/**
* Bitmap image.
* This is used to create a bitmap image that will be inserted
* into pdf.
*/
public class BitmapImage implements PDFImage {
private int height;
private int width;
private int bitsPerComponent;
private PDFDeviceColorSpace colorSpace;
private byte[] bitmaps;
private PDFReference maskRef;
private PDFColor transparent = null;
private String key;
private PDFDocument pdfDoc;
private PDFFilter pdfFilter;
private boolean multipleFiltersAllowed = true;
/**
* Create a bitmap image.
* Creates a new bitmap image with the given data.
*
* @param k the key to be used to lookup the image
* @param width the width of the image
* @param height the height of the image
* @param data the bitmap data
* @param mask the transparency mask reference if any
*/
public BitmapImage(String k, int width, int height, byte[] data,
String mask) {
this.key = k;
this.height = height;
this.width = width;
this.bitsPerComponent = 8;
this.colorSpace = new PDFDeviceColorSpace(PDFDeviceColorSpace.DEVICE_RGB);
this.bitmaps = data;
if (mask != null) {
maskRef = new PDFReference(mask);
}
}
/**
* Setup this image with the pdf document.
*
* @param doc the pdf document this will be inserted into
*/
public void setup(PDFDocument doc) {
this.pdfDoc = doc;
}
/**
* Get the key for this image.
* This key is used by the pdf document so that it will only
* insert an image once. All other references to the same image
* will use the same XObject reference.
*
* @return the unique key to identify this image
*/
public String getKey() {
return key;
}
/**
* Get the width of this image.
*
* @return the width of the image
*/
public int getWidth() {
return width;
}
/**
* Get the height of this image.
*
* @return the height of the image
*/
public int getHeight() {
return height;
}
/**
* Set the color space for this image.
*
* @param cs the pdf color space
*/
public void setColorSpace(PDFDeviceColorSpace cs) {
colorSpace = cs;
}
/**
* Get the color space for the image data.
* Possible options are: DeviceGray, DeviceRGB, or DeviceCMYK
*
* @return the pdf doclor space
*/
public PDFDeviceColorSpace getColorSpace() {
return colorSpace;
}
/** {@inheritDoc} */
public int getBitsPerComponent() {
return bitsPerComponent;
}
/**
* Set the transparent color for this iamge.
*
* @param t the transparent color
*/
public void setTransparent(PDFColor t) {
transparent = t;
}
/**
* Check if this image has a transparent color.
*
* @return true if it has a transparent color
*/
public boolean isTransparent() {
return transparent != null;
}
/**
* Get the transparent color for this image.
*
* @return the transparent color if any
*/
public PDFColor getTransparentColor() {
return transparent;
}
/**
* Get the bitmap mask reference for this image.
* Current not supported.
*
* @return the bitmap mask reference
*/
public String getMask() {
return null;
}
/** {@inheritDoc} */
public PDFReference getSoftMaskReference() {
return maskRef;
}
/** {@inheritDoc} */
public boolean isInverted() {
return false;
}
/** {@inheritDoc} */
public void outputContents(OutputStream out) throws IOException {
out.write(bitmaps);
}
/** {@inheritDoc} */
public void populateXObjectDictionary(PDFDictionary dict) {
//nop
}
/**
* Get the ICC stream.
* @return always returns null since this has no icc color space
*/
public PDFICCStream getICCStream() {
return null;
}
/**
* Check if this is a postscript image.
* @return always returns false
*/
public boolean isPS() {
return false;
}
/**
* {@inheritDoc}
*/
public String getFilterHint() {
return PDFFilterList.IMAGE_FILTER;
}
/**
* {@inheritDoc}
*/
public PDFFilter getPDFFilter() {
return pdfFilter;
}
public void setPDFFilter(PDFFilter pdfFilter) {
this.pdfFilter = pdfFilter;
}
/** {@inheritDoc} */
public boolean multipleFiltersAllowed() {
return multipleFiltersAllowed;
}
/**
* Disallows multiple filters.
*/
public void disallowMultipleFilters() {
multipleFiltersAllowed = false;
}
}