165 lines
5.2 KiB
C++
Executable File
165 lines
5.2 KiB
C++
Executable File
/*
|
|
* BitMaps.h - MAX bitmap access classes
|
|
*
|
|
* Copyright © John Wainwright 1996
|
|
*
|
|
*/
|
|
|
|
#ifndef _H_BITMAPS
|
|
#define _H_BITMAPS
|
|
|
|
#include "Max.h"
|
|
#include "MAXObj.h"
|
|
#include "COMMDLG.H"
|
|
#include "bmmlib.h"
|
|
|
|
class MAXBitMapWindow;
|
|
class MotionTracker;
|
|
class MAXBitMap;
|
|
|
|
typedef struct // entry in MAXBitMap window table
|
|
{
|
|
HWND window;
|
|
MAXBitMap* mbm;
|
|
} mbm_window;
|
|
|
|
/* ------------------------ MAXBitMap ------------------------------ */
|
|
|
|
applyable_class (MAXBitMap)
|
|
|
|
class MAXBitMap : public Value
|
|
{
|
|
public:
|
|
BitmapInfo bi; // our BitMapInfo
|
|
Bitmap* bm; // the actual bitmap
|
|
Tab<MotionTracker*> trackers; // any motion trackers
|
|
MotionTracker* dragger; // tracker currently under drag
|
|
WNDPROC main_window_proc; // original display window proc if ours installed
|
|
GBuffer* gb; // GBuffer if non-NULL
|
|
GBufReader* gbr; // current GBuffer reader if non-NULL
|
|
short flags;
|
|
|
|
static Tab<mbm_window> windows; // table of MAXBitMap windows currently open
|
|
|
|
ScripterExport MAXBitMap();
|
|
ScripterExport MAXBitMap(BitmapInfo bi, Bitmap* bm);
|
|
~MAXBitMap();
|
|
|
|
static void setup();
|
|
static MAXBitMap* find_window_mbm(HWND hwnd);
|
|
|
|
classof_methods (MAXBitMap, Value);
|
|
# define is_bitmap(o) ((o)->tag == class_tag(MAXBitMap))
|
|
void collect() { delete this; }
|
|
void gc_trace();
|
|
ScripterExport void sprin1(CharStream* s);
|
|
|
|
Value* new_motionTracker();
|
|
void install_window_proc();
|
|
|
|
#include "defimpfn.h"
|
|
def_visible_generic ( display, "display");
|
|
def_visible_generic ( unDisplay, "unDisplay" );
|
|
def_visible_generic ( save, "save" );
|
|
def_visible_generic ( gotoFrame, "gotoFrame");
|
|
def_visible_generic ( close, "close");
|
|
def_visible_generic ( getTracker, "getTracker" );
|
|
def_visible_generic ( deleteTracker, "deleteTracker" );
|
|
use_generic ( copy, "copy" );
|
|
def_visible_generic ( zoom, "zoom" );
|
|
def_visible_generic ( crop, "crop" );
|
|
def_visible_generic ( setAsBackground, "setAsBackground" );
|
|
def_visible_generic ( getPixels, "getPixels" );
|
|
def_visible_generic ( setPixels, "setPixels" );
|
|
def_visible_generic ( getIndexedPixels, "getIndexedPixels" );
|
|
def_visible_generic ( setIndexedPixels, "setIndexedPixels" );
|
|
def_visible_generic ( getChannel, "getChannel" );
|
|
def_visible_generic ( getChannelAsMask, "getChannelAsMask" );
|
|
|
|
Value* get_property(Value** arg_list, int count);
|
|
Value* set_property(Value** arg_list, int count);
|
|
|
|
void to_fpvalue(FPValue& v) { v.bm = new PBBitmap (bi); v.type = TYPE_BITMAP; }
|
|
};
|
|
|
|
#define BM_SAVED 0x0001 // bitmap has been written to and output steam is open
|
|
#define BM_READONLY 0x0002 // existing bitmap opened (and so readonly).
|
|
#define BM_FILEBACKED 0x0004 // bitmap is backed by a file
|
|
|
|
/* -------------------- MotionTracker -------------------------- */
|
|
|
|
applyable_class (MotionTracker)
|
|
|
|
class MotionTracker : public Value
|
|
{
|
|
public:
|
|
MAXBitMap* mbm; // the bitmap I'm tracking
|
|
int index; // which tracker in that bitmap
|
|
int cur_frame; // frame I last tracked
|
|
POINT center; // current feature center
|
|
RECT bounds; // feature bounds relative to center
|
|
RECT motion_bounds; // maximum frame-to-frame motion relative to feature center
|
|
POINT mouse_down_at; // mouse pos at mousedown
|
|
int handle_x; // handle pos at mouse_down..
|
|
int handle_y; // handle pos at mouse_down..
|
|
int handle; // which handle is dragging
|
|
BYTE* target; // current target image as 3 BYTE RGB per pixel
|
|
POINT* track_cache; // keeps a cache of tracking coords, one per frame (inval if change gizmo)
|
|
short compare_mode; // feature matching space: rgb color, luminence, edge-filtered, etc.
|
|
float match_distance; // last tracking match 'distance'
|
|
HBITMAP id_bitmap; // unbelievable - I need to use a bitmap copy to do XOR text drawing
|
|
short flags;
|
|
|
|
MotionTracker(MAXBitMap* imbm, int iindex);
|
|
~MotionTracker();
|
|
|
|
classof_methods(MotionTracker, Value);
|
|
void collect() { delete this; }
|
|
ScripterExport void sprin1(CharStream* s);
|
|
void gc_trace();
|
|
|
|
void track();
|
|
void clear_track_cache();
|
|
void set_center(int x, int y);
|
|
void set_index(int i);
|
|
void copy_target();
|
|
void draw(HWND hWnd);
|
|
void draw_gizmo(HDC hdc);
|
|
void inval_gizmo();
|
|
BOOL start_drag(HWND hwnd, int wParam, long lParam);
|
|
void drag(HWND hwnd, int wParam, long lParam);
|
|
void end_drag(HWND hwnd);
|
|
void move(HWND hwnd, int dx, int dy);
|
|
void deselect(HWND hwnd);
|
|
|
|
def_visible_generic ( resample, "resample");
|
|
def_visible_generic ( reset, "reset");
|
|
|
|
def_property ( center );
|
|
Value* get_property(Value** arg_list, int count);
|
|
Value* set_property(Value** arg_list, int count);
|
|
};
|
|
|
|
#define MT_GIZMO_SELECTED 0x0001
|
|
#define MT_GIZMO_MOVED 0x0002
|
|
#define MT_ENABLED 0x0004
|
|
|
|
#define MT_MATCH_RGB 0
|
|
#define MT_MATCH_GRAY 1
|
|
#define MT_MATCH_EDGE 2
|
|
#define MT_MATCH_RANK 3
|
|
|
|
#define MT_NO_HANDLE 0 // handle codes...
|
|
#define MT_CENTER 1
|
|
#define MT_TOPLEFT_BOUNDS 2
|
|
#define MT_BOTLEFT_BOUNDS 3
|
|
#define MT_TOPRIGHT_BOUNDS 4
|
|
#define MT_BOTRIGHT_BOUNDS 5
|
|
#define MT_TOPLEFT_MBOUNDS 6
|
|
#define MT_BOTLEFT_MBOUNDS 7
|
|
#define MT_TOPRIGHT_MBOUNDS 8
|
|
#define MT_BOTRIGHT_MBOUNDS 9
|
|
|
|
#endif
|
|
|