📄 bitmap.h
字号:
BitmapManager *manager;
int flags;
int type; // See "Basic bitmap types", below
BMM_Color_48 palette[256]; // 256 palette entries max
int paletteSlots;
UWORD *gammaTable; // Gamma correction table
RenderInfo *rendInfo;
GBuffer *gbuffer;
public:
BMMExport BitmapStorage ( );
bVirtual ~BitmapStorage ( );
BitmapInfo bi;
TCHAR* evalString;
// gamma
BMMExport float SetGamma(float gam);
inline int HasGamma ( ) { return (gammaTable!=NULL) ? 1:0; };
BMMExport void SetHasGamma(BOOL onOff);
void UpdateGammaTable();
BMMExport UWORD *GetInputGammaTable();
inline BitmapManager *Manager ( ) { return manager; }
inline int OpenMode ( ) { return openMode; }
inline int Width ( ) { return bi.Width(); }
inline int Height ( ) { return bi.Height(); }
inline float Aspect ( ) { return bi.Aspect(); }
inline float Gamma ( ) { return bi.Gamma(); }
inline int Paletted ( ) { return (flags & MAP_PALETTED) ? paletteSlots:0; }
inline int IsDithered ( ) { return (flags & MAP_DITHERED) ? 1:0; };
inline int PreMultipliedAlpha ( ) { return (flags & MAP_ALPHA_PREMULTIPLIED) ? 1:0; };
inline int HasAlpha ( ) { return (flags & MAP_HAS_ALPHA) ? 1:0; };
inline int UsageCount ( ) { return usageCount; };
inline int Type ( ) { return type; };
inline int Flags ( ) { return flags; };
inline void SetFlags ( DWORD f ) { flags |= f; }
bVirtual int MaxRGBLevel ( ) = 0;
bVirtual int MaxAlphaLevel ( ) = 0;
//-- Scaling Tools
bVirtual void Scale ( WORD *, int, WORD *, int );
bVirtual BOOL GetSRow ( WORD *, int, WORD *, int );
bVirtual BOOL PutSRow ( WORD *, int, WORD *, int );
bVirtual BOOL GetSCol ( WORD *, WORD *, int, int );
bVirtual BOOL PutSCol ( WORD *, WORD *, int, int );
bVirtual BOOL ScaleY ( Bitmap *, BMM_Color_64 *, WORD *, WORD *, HWND, int cw = 0, int ch = 0 );
bVirtual BOOL ScaleX ( Bitmap *, BMM_Color_64 *, WORD *, WORD *, HWND, int cw = 0, int ch = 0 );
bVirtual int StraightCopy ( Bitmap *from );
bVirtual void *GetStoragePtr ( int *type ) { *type = BMM_NO_TYPE; return (NULL); }
bVirtual void *GetAlphaPtr ( int *type ) { *type = BMM_NO_TYPE; return (NULL); }
//-- These are the standard methods for accessing image pixels
bVirtual int Get16Gray ( int x,int y,int pixels,WORD *ptr) = 0;
bVirtual int Put16Gray ( int x,int y,int pixels,WORD *ptr) = 0;
bVirtual int GetLinearPixels ( int x,int y,int pixels,BMM_Color_64 *ptr) = 0;
bVirtual int GetPixels ( int x,int y,int pixels,BMM_Color_64 *ptr) = 0;
bVirtual int PutPixels ( int x,int y,int pixels,BMM_Color_64 *ptr) = 0;
bVirtual int GetIndexPixels ( int x,int y,int pixels,unsigned char *ptr) = 0;
bVirtual int PutIndexPixels ( int x,int y,int pixels,unsigned char *ptr) = 0;
bVirtual int CropImage ( int width,int height,BMM_Color_64 fillcolor) = 0;
bVirtual int CropImage ( int width,int height,int fillindex) = 0;
bVirtual int ResizeImage ( int width,int height,int newpalette) = 0;
bVirtual int CopyCrop ( Bitmap *from, BMM_Color_64 fillcolor );
bVirtual int CopyScaleLow ( Bitmap *from );
bVirtual int CopyScaleHigh ( Bitmap *from, HWND hWnd, BMM_Color_64 **buf = NULL, int w=0, int h=0 );
bVirtual int CopyImage ( Bitmap *from,int operation,BMM_Color_64 fillcolor, BitmapInfo *bi = NULL);
bVirtual int CopyImage ( Bitmap *from,int operation,int fillindex);
bVirtual int GetPalette ( int start,int count,BMM_Color_48 *ptr) = 0;
bVirtual int SetPalette ( int start,int count,BMM_Color_48 *ptr) = 0;
bVirtual int GetFiltered ( float u,float v,float du,float dv,BMM_Color_64 *ptr) = 0;
//-- User Interface
bVirtual int Allocate ( BitmapInfo *bi,BitmapManager *manager,int openMode) = 0;
bVirtual int Connect ( ) = 0;
bVirtual int Disconnect ( ) = 0;
bVirtual int MapReady ( ) = 0;
bVirtual int ClosestColor ( BMM_Color_48 color);
bVirtual int ClosestColor ( int r,int g,int b);
// GBuffer methods ----------------------
// get a pointer to specified channel: also determine its type for check
bVirtual void* GetChannel(ULONG channelID, ULONG& chanType) { return gbuffer?gbuffer->GetChannel(channelID, chanType):NULL;}
GBuffer *GetGBuffer() { return gbuffer; }
// create the specified channels -- return channels present: (creates GBuffer if non-existent);
bVirtual ULONG CreateChannels(ULONG channelIDs);
// delete all the channels in channelIDs
bVirtual void DeleteChannels(ULONG channelIDs) { if (gbuffer) gbuffer->DeleteChannels(channelIDs); }
// query which channels are present
bVirtual ULONG ChannelsPresent() { return gbuffer?gbuffer->ChannelsPresent():0; }
// For output bitmaps, can get RenderInfo, which is written by the
// renderer
// AllocRenderInfo will alloc only if RenderInfo doesn't yet exist.
BMMExport RenderInfo* AllocRenderInfo();
// GetRenderInfo just hands back RenderInfo pointer
BMMExport RenderInfo* GetRenderInfo();
};
//-----------------------------------------------------------------------------
//-- Bitmap Filter Class
//
// Private class not to be documented
//
class BitmapFilter {
protected:
UINT usageCount; // Number of Bitmaps using this storage
BitmapManager *manager; // Pointer to bitmap manager
BitmapStorage *storage; // Pointer to storage itself
DWORD flags; // Filter flags
int dirty; // Needs updating flag
UINT type; // Type index of filter
public:
BMMExport BitmapFilter();
bVirtual ~BitmapFilter();
inline DWORD Flags ( ) { return flags; };
inline void SetFlag ( DWORD flag) { flags |= flag; dirty = 1; };
inline void ToggleFlag ( DWORD flag) { flags ^= flag; dirty = 1; };
inline void ClearFlag ( DWORD flag) { flags &= (~flag); dirty = 1; };
inline UINT Type ( ) { return type; };
inline void SetType ( UINT t) { type = t; };
BMMExport int Initialize ( BitmapManager *m,BitmapStorage *s);
virtual int GetFiltered ( float u,float v,float du,float dv,BMM_Color_64 *ptr) = 0;
virtual void Free ( ) {};
BMMExport int Connect ( );
BMMExport int Disconnect ( );
BMMExport int SetStorage ( BitmapStorage *storage);
inline BitmapStorage *GetStorage ( ) { return storage; };
inline void MakeDirty ( ) { dirty = 1; };
};
//-----------------------------------------------------------------------------
//-- Bitmap Dither Class
//
// Private class not to be documented
class BitmapDither {
protected:
BitmapStorage *storage; // Pointer to storage itself
int type; // Type index of filter
public:
BMMExport BitmapDither ( );
bVirtual ~BitmapDither ( );
inline UINT Type ( ) { return type; };
inline void SetType ( UINT t) { type = t; };
BMMExport int Initialize ( BitmapStorage *s);
virtual int PutPixels ( int x,int y,int pixels,BMM_Color_64 *ptr) = 0;
virtual void Free ( ) {};
BMMExport int SetStorage ( BitmapStorage *storage);
};
// Callback for notifying bitmaps that their Storage has changed, and
// any on screen displays need to be refreshed. Installed via
// Bitmap::SetNotify();
// VFBClosed is
class BitmapNotify{
public:
virtual int Changed(ULONG flags)=0;
virtual void VFBClosed() {} // called when VFB is closed
};
// Callback for interactive adjustment of bitmap "Cropping rectangle", passed
// in as an argument to Bitmap::Display.
class CropCallback {
public:
virtual float GetInitU()=0;
virtual float GetInitV()=0;
virtual float GetInitW()=0;
virtual float GetInitH()=0;
virtual BOOL GetInitMode()=0;
virtual void SetValues(float u, float v, float w, float h, BOOL md)=0;
virtual void OnClose()=0;
};
//-----------------------------------------------------------------------------
//-- Basic Bitmap Class
//
//
#define BMM_SINGLEFRAME -2000000L
class Bitmap {
friend class BitmapManagerImp;
private:
DWORD flags; // See above
BitmapManager *manager; // Manager of this bitmap
BitmapIO *output; // Head of output handler list
BitmapFilter *filter; // Filtered access methods
BitmapDither *dither; // Dither methods
BitmapStorage *storage; // Actual storage
UINT filterType; // Filtered access type
UINT ditherType; // Dither type
DWORD modifyID; // changes when bitmap changes: used in render effects
int Free();
void *vfbData;
BitmapNotify *bmNotify; // Called when storage is change so display can update
friend LRESULT CALLBACK InputWndProc ( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
// To delete a Bitmap, call Bitmap::DeleteThis()
BMMExport ~Bitmap ( );
// To get a new Bitmap, call BitmapManager::NewBitmap()
BMMExport Bitmap ( BitmapManager *manager = TheManager );
public:
inline BitmapManager *Manager ( ) { return manager; };
//-- Don't use these unless you know what you're doing ----------------
BMMExport int Create ( BitmapInfo *bi );
BMMExport BOOL FixDeviceName ( BitmapInfo *bi );
inline int MapReady ( ) { if (storage) return storage->MapReady(); return 0; };
BMMExport void AddOutput ( BitmapIO *out );
BMMExport void RemoveOutput ( BitmapIO *out );
BMMExport BitmapIO * FindOutput ( BitmapInfo *bi );
BMMExport PAVIFILE GetPaviFile ( BitmapInfo *bi );
inline void *GetVFBData ( ) { return vfbData; }
inline void SetVFBData (void *vfb ) { vfbData = vfb; }
//-- Public Interface -------------------------------------------------
BMMExport void DeleteThis ( ); // Call this , NOT delete, to free a Bitmap.
inline DWORD Flags ( ) { return flags; };
inline void SetFlag ( DWORD flag ) { flags |= flag; };
inline void ToggleFlag ( DWORD flag ) { flags ^= flag; };
inline void ClearFlag ( DWORD flag ) { flags &= (~flag); };
inline int Width ( ) { if (storage) return storage->Width(); return 0; };
inline int Height ( ) { if (storage) return storage->Height(); return 0; };
inline float Aspect ( ) { if (storage) return storage->Aspect(); return (float)0.0; };
inline float Gamma ( ) { if (storage) return storage->Gamma(); return (float)0.0; };
inline int Paletted ( ) { if (storage) return storage->Paletted(); return 0; };
inline int IsDithered ( ) { if (storage) return storage->IsDithered(); return 0; };
inline int PreMultipliedAlpha ( ) { if (storage) return storage->PreMultipliedAlpha(); return 0; };
inline int HasAlpha ( ) { if (storage) return storage->HasAlpha(); return 0; };
inline int MaxRGBLevel ( ) { if (storage) return storage->MaxRGBLevel(); return 0; };
inline int MaxAlphaLevel ( ) { if (storage) return storage->MaxAlphaLevel(); return 0; };
int Put16Gray ( int x,int y,int pixels,WORD *ptr )
{ if (storage) return storage->Put16Gray(x,y,pixels,ptr); return 0; };
inline void *GetStoragePtr ( int *type )
{ if (storage) return storage->GetStoragePtr(type); return NULL; };
inline void *GetAlphaPtr ( int *type )
{ if (storage) return storage->GetAlphaPtr(type); return NULL; };
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -