/*
Copyright 2006,2007 Stefano Chizzolini. http://clown.stefanochizzolini.it
Contributors:
* Stefano Chizzolini (original code developer, http://www.stefanochizzolini.it)
This file should be part of the source code distribution of "PDF Clown library"
(the Program): see the accompanying README files for more info.
This Program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2 of the License, or (at your option) any later version.
This Program is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY, either expressed or implied; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more details.
You should have received a copy of the GNU General Public License along with this
Program (see README files); if not, go to the GNU website (http://www.gnu.org/).
Redistribution and use, with or without modification, are permitted provided that such
redistributions retain the above copyright notice, license and disclaimer, along with
this list of conditions.
*/
using it.stefanochizzolini.clown.documents;
using it.stefanochizzolini.clown.files;
using it.stefanochizzolini.clown.objects;
namespace it.stefanochizzolini.clown.documents.contents.colorSpaces{
/**
<summary>Color space [PDF:1.6:4.5].</summary>
*/
public abstract class ColorSpace
: PdfObjectWrapper<PdfDirectObject>
{
#region static
#region interface
#region public
/**
<summary>Wraps a color space reference into a color space object.</summary>
<param name="reference">Reference to a color space object.</param>
<returns>Color space object associated to the reference.</returns>
*/
public static ColorSpace Wrap(
PdfReference reference
)
{return Wrap(reference,null);}
/**
<summary>Wraps a color space base object into a color space object.</summary>
<param name="baseObject">Base object of a color space object.</param>
<param name="container">Indirect object possibly containing the color space
base object.</param>
<returns>Color space object associated to the base object.</returns>
*/
public static ColorSpace Wrap(
PdfDirectObject baseObject,
PdfIndirectObject container
)
{
/*
NOTE: This is a factory method for any ColorSpace-derived object.
*/
if(baseObject == null)
return null;
PdfName name;
// Get the data object corresponding to the color space!
PdfDataObject baseDataObject = File.Resolve(baseObject);
// Is it an array?
/*
NOTE: [PDF:1.6:4.5.2] A color space is defined by an array object whose
first element is a name object identifying the color space family. For
families that do not require parameters, the color space CAN be specified
simply by the family name itself instead of an array.
*/
if(baseDataObject is PdfArray) // PdfArray.
{name = (PdfName)((PdfArray)baseDataObject)[0];}
else // PdfName (by definition).
{name = (PdfName)baseDataObject;}
if(name.Equals(PdfName.DeviceRGB))
return new DeviceRGBColorSpace(baseObject,container);
else if(name.Equals(PdfName.DeviceCMYK))
return new DeviceCMYKColorSpace(baseObject,container);
else if(name.Equals(PdfName.DeviceGray))
return new DeviceGrayColorSpace(baseObject,container);
else if(name.Equals(PdfName.CalRGB))
return new CalRGBColorSpace(baseObject,container);
else if(name.Equals(PdfName.CalGray))
return new CalGrayColorSpace(baseObject,container);
else if(name.Equals(PdfName.Lab))
return new LabColorSpace(baseObject,container);
else if(name.Equals(PdfName.ICCBased))
return new ICCBasedColorSpace(baseObject,container);
else
return null; // Should never happen.
}
#endregion
#endregion
#endregion
#region dynamic
#region constructors
protected ColorSpace(
Document context,
PdfDirectObject baseDataObject
) : base(
context.File,
baseDataObject
)
{}
protected ColorSpace(
PdfDirectObject baseObject,
PdfIndirectObject container
) : base(
baseObject,
container
)
{}
#endregion
#region interface
#region public
public abstract Color GetColor(
PdfDirectObject[] components
);
public abstract Color GetDefaultColor(
);
#endregion
#endregion
#endregion
}
}
|