📄 freeimagebitmap.cs
字号:
EnsureNotDisposed();
return FreeImage.GetScanLine(dib, (int)(FreeImage.GetHeight(dib) - 1));
}
}
/// <summary>
/// Width, in bytes, of this <see cref="FreeImageBitmap"/>.
/// In case this <see cref="FreeImageBitmap"/> is top down <b>Stride</b> will be positive, else negative.
/// </summary>
public int Stride
{
get
{
return -Line;
}
}
/// <summary>
/// Gets attribute flags for the pixel data of this <see cref="FreeImageBitmap"/>.
/// </summary>
public unsafe int Flags
{
get
{
EnsureNotDisposed();
int result = 0;
byte alpha;
int cd = ColorDepth;
if ((cd == 32) || (FreeImage.GetTransparencyCount(dib) != 0))
{
result += (int)ImageFlags.HasAlpha;
}
if (cd == 32)
{
uint width = FreeImage.GetWidth(dib);
uint height = FreeImage.GetHeight(dib);
for (int y = 0; y < height; y++)
{
RGBQUAD* scanline = (RGBQUAD*)FreeImage.GetScanLine(dib, y);
for (int x = 0; x < width; x++)
{
alpha = scanline[x].Color.A;
if (alpha != byte.MinValue && alpha != byte.MaxValue)
{
result += (int)ImageFlags.HasTranslucent;
y = (int)height;
break;
}
}
}
}
else if (FreeImage.GetTransparencyCount(dib) != 0)
{
byte[] transTable = FreeImage.GetTransparencyTableEx(dib);
for (int i = 0; i < transTable.Length; i++)
{
if (transTable[i] != byte.MinValue && transTable[i] != byte.MaxValue)
{
result += (int)ImageFlags.HasTranslucent;
break;
}
}
}
if (FreeImage.GetICCProfileEx(dib).IsCMYK)
{
result += (int)ImageFlags.ColorSpaceCmyk;
}
else
{
result += (int)ImageFlags.ColorSpaceRgb;
}
if (FreeImage.GetColorType(dib) == FREE_IMAGE_COLOR_TYPE.FIC_MINISBLACK ||
FreeImage.GetColorType(dib) == FREE_IMAGE_COLOR_TYPE.FIC_MINISWHITE)
{
result += (int)ImageFlags.ColorSpaceGray;
}
if (originalFormat == FREE_IMAGE_FORMAT.FIF_BMP ||
originalFormat == FREE_IMAGE_FORMAT.FIF_FAXG3 ||
originalFormat == FREE_IMAGE_FORMAT.FIF_ICO ||
originalFormat == FREE_IMAGE_FORMAT.FIF_JPEG ||
originalFormat == FREE_IMAGE_FORMAT.FIF_PCX ||
originalFormat == FREE_IMAGE_FORMAT.FIF_PNG ||
originalFormat == FREE_IMAGE_FORMAT.FIF_PSD ||
originalFormat == FREE_IMAGE_FORMAT.FIF_TIFF)
{
result += (int)ImageFlags.HasRealDpi;
}
return result;
}
}
/// <summary>
/// Gets the width and height of this <see cref="FreeImageBitmap"/>.
/// </summary>
public SizeF PhysicalDimension
{
get
{
EnsureNotDisposed();
return new SizeF((float)FreeImage.GetWidth(dib), (float)FreeImage.GetHeight(dib));
}
}
/// <summary>
/// Gets the pixel format for this <see cref="FreeImageBitmap"/>.
/// </summary>
public PixelFormat PixelFormat
{
get
{
EnsureNotDisposed();
return FreeImage.GetPixelFormat(dib);
}
}
/// <summary>
/// Gets IDs of the property items stored in this <see cref="FreeImageBitmap"/>.
/// </summary>
public int[] PropertyIdList
{
get
{
EnsureNotDisposed();
List<int> list = new List<int>();
ImageMetadata metaData = new ImageMetadata(dib, true);
foreach (MetadataModel metadataModel in metaData)
{
foreach (MetadataTag metadataTag in metadataModel)
{
list.Add(metadataTag.ID);
}
}
return list.ToArray();
}
}
/// <summary>
/// Gets all the property items (pieces of metadata) stored in this <see cref="FreeImageBitmap"/>.
/// </summary>
public PropertyItem[] PropertyItems
{
get
{
EnsureNotDisposed();
List<PropertyItem> list = new List<PropertyItem>();
ImageMetadata metaData = new ImageMetadata(dib, true);
foreach (MetadataModel metadataModel in metaData)
{
foreach (MetadataTag metadataTag in metadataModel)
{
list.Add(metadataTag.GetPropertyItem());
}
}
return list.ToArray();
}
}
/// <summary>
/// Gets the format of this <see cref="FreeImageBitmap"/>.
/// </summary>
public ImageFormat RawFormat
{
get
{
EnsureNotDisposed();
Attribute guidAttribute =
Attribute.GetCustomAttribute(
typeof(FreeImageBitmap), typeof(System.Runtime.InteropServices.GuidAttribute)
);
return (guidAttribute == null) ?
null :
new ImageFormat(new Guid(((GuidAttribute)guidAttribute).Value));
}
}
/// <summary>
/// Gets the width and height, in pixels, of this <see cref="FreeImageBitmap"/>.
/// </summary>
public Size Size
{
get
{
EnsureNotDisposed();
return new Size(Width, Height);
}
}
/// <summary>
/// Gets or sets an object that provides additional data about the <see cref="FreeImageBitmap"/>.
/// </summary>
public Object Tag
{
get
{
EnsureNotDisposed();
return tag;
}
set
{
EnsureNotDisposed();
tag = value;
}
}
/// <summary>
/// Gets whether this <see cref="FreeImageBitmap"/> has been disposed.
/// </summary>
public bool IsDisposed
{
get
{
return disposed;
}
}
/// <summary>
/// Gets a new instance of a metadata representing class.
/// </summary>
public ImageMetadata Metadata
{
get
{
EnsureNotDisposed();
return new ImageMetadata(dib, true);
}
}
/// <summary>
/// Gets or sets the comment of this <see cref="FreeImageBitmap"/>.
/// Supported formats are JPEG, PNG and GIF.
/// </summary>
public string Comment
{
get
{
EnsureNotDisposed();
return FreeImage.GetImageComment(dib);
}
set
{
EnsureNotDisposed();
FreeImage.SetImageComment(dib, value);
}
}
/// <summary>
/// Returns whether this <see cref="FreeImageBitmap"/> has a palette.
/// </summary>
public bool HasPalette
{
get
{
EnsureNotDisposed();
return (FreeImage.GetPalette(dib) != IntPtr.Zero);
}
}
/// <summary>
/// Gets or sets the entry used as transparent color in this <see cref="FreeImageBitmap"/>.
/// Only works for 1-, 4- and 8-bpp.
/// </summary>
public int TransparentIndex
{
get
{
EnsureNotDisposed();
return FreeImage.GetTransparentIndex(dib);
}
set
{
EnsureNotDisposed();
FreeImage.SetTransparentIndex(dib, value);
}
}
/// <summary>
/// Gets the number of frames in this <see cref="FreeImageBitmap"/>.
/// </summary>
public int FrameCount
{
get
{
EnsureNotDisposed();
int result = 1;
if (!mdib.IsNull)
{
result = FreeImage.GetPageCount(mdib);
}
return result;
}
}
/// <summary>
/// Gets the ICCProfile structure of this <see cref="FreeImageBitmap"/>.
/// </summary>
public FIICCPROFILE ICCProfile
{
get
{
EnsureNotDisposed();
return FreeImage.GetICCProfileEx(dib);
}
}
/// <summary>
/// Gets the format of the original image in case
/// this <see cref="FreeImageBitmap"/> was loaded from a file or stream.
/// </summary>
public FREE_IMAGE_FORMAT ImageFormat
{
get
{
EnsureNotDisposed();
return originalFormat;
}
}
#endregion
#region Methods
/// <summary>
/// Gets the bounds of this <see cref="FreeImageBitmap"/> in the specified unit.
/// </summary>
/// <param name="pageUnit">One of the <see cref="System.Drawing.GraphicsUnit"/> values indicating
/// the unit of measure for the bounding rectangle.</param>
/// <returns>The <see cref="System.Drawing.RectangleF"/> that represents the bounds of this
/// <see cref="FreeImageBitmap"/>, in the specified unit.</returns>
public RectangleF GetBounds(ref GraphicsUnit pageUnit)
{
EnsureNotDisposed();
pageUnit = GraphicsUnit.Pixel;
return new RectangleF(
0f,
0f,
(float)FreeImage.GetWidth(dib),
(float)FreeImage.GetHeight(dib));
}
/// <summary>
/// Gets the specified property item from this <see cref="FreeImageBitmap"/>.
/// </summary>
/// <param name="propid">The ID of the property item to get.</param>
/// <returns>The <see cref="PropertyItem"/> this method gets.</returns>
public PropertyItem GetPropertyItem(int propid)
{
EnsureNotDisposed();
ImageMetadata metadata = new ImageMetadata(dib, true);
foreach (MetadataModel metadataModel in metadata)
{
foreach (MetadataTag tag in metadataModel)
{
if (tag.ID == propid)
{
return tag.GetPropertyItem();
}
}
}
return null;
}
/// <summary>
/// Returns a thumbnail for this <see cref="FreeImageBitmap"/>.
/// </summary>
/// <param name="thumbWidth">The width, in pixels, of the requested thumbnail image.</param>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -