/*
http://www.cgsoso.com/forum-211-1.html
CG搜搜 Unity3d 每日Unity3d插件免费更新 更有VIP资源!
CGSOSO 主打游戏开发,影视设计等CG资源素材。
插件如若商用,请务必官网购买!
daily assets update for try.
U should buy the asset from home store if u use it in your project!
*/
using System;
using System.Runtime.InteropServices;
namespace Paroxe.PdfRenderer.Internal
{
public class PDFBitmap : IDisposable
{
private bool m_Disposed;
private IntPtr m_NativePointer;
private readonly int m_Width;
private readonly int m_Height;
private readonly bool m_UseAlphaChannel;
public PDFBitmap(int width, int height, bool useAlphaChannel)
{
PDFLibrary.AddRef("PDFBitmap");
m_Width = width;
m_Height = height;
m_UseAlphaChannel = useAlphaChannel;
m_NativePointer = FPDFBitmap_Create(m_Width, m_Height, useAlphaChannel);
}
~PDFBitmap()
{
Dispose(false);
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (!m_Disposed)
{
lock (PDFLibrary.nativeLock)
{
if (m_NativePointer != IntPtr.Zero)
FPDFBitmap_Destroy(m_NativePointer);
m_NativePointer = IntPtr.Zero;
}
PDFLibrary.RemoveRef("PDFBitmap");
m_Disposed = true;
}
}
public int Width
{
get { return m_Width; }
}
public int Height
{
get { return m_Height; }
}
public bool UseAlphaChannel
{
get { return m_UseAlphaChannel; }
}
public IntPtr NativePointer
{
get { return m_NativePointer; }
}
public bool HasSameSize(PDFBitmap other)
{
return (m_Width == other.m_Width && m_Height == other.m_Height);
}
public bool HasSameSize(int width, int height)
{
return (m_Width == width && m_Height == height);
}
public void FillRect(int left, int top, int width, int height, int color)
{
FPDFBitmap_FillRect(m_NativePointer, left, top, width, height, color);
}
public IntPtr GetBuffer()
{
return FPDFBitmap_GetBuffer(m_NativePointer);
}
public int GetStride()
{
return FPDFBitmap_GetStride(m_NativePointer);
}
#region NATIVE
[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
private static extern IntPtr FPDFBitmap_Create(int width, int height, bool alpha);
//[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
//private static extern IntPtr FPDFBitmap_CreateEx(int width, int height, int format, IntPtr firstScan, int stride);
[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
private static extern void FPDFBitmap_Destroy(IntPtr bitmap);
[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
private static extern void FPDFBitmap_FillRect(IntPtr bitmap, int left, int top, int width, int height, int color);
[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
private static extern IntPtr FPDFBitmap_GetBuffer(IntPtr bitmap);
[DllImport(PDFLibrary.PLUGIN_ASSEMBLY)]
private static extern int FPDFBitmap_GetStride(IntPtr bitmap);
#endregion
}
}