• Welcome to Theos PowerBasic Museum 2017.

HURRAH

Started by Patrice Terrier, April 30, 2013, 06:21:02 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Patrice Terrier

I have just completed the translation of my GDImage graphic DLL from PB to plain C/C++

Original PB's 32-bit size: 353 Kb.

VS2010 C/C++ 32-bit size : 288 Kb.
VS2010 C/C++ 64-bit size : 460 Kb.

I have tortured my brain for monthes in order to compile everything without error.

And now comes the time to start the debug session...

Translating everything by hand forced me to learn the arcane of C/C++, but i couldn't have done the job, without the help of the fantastic Visual Studio intelli-sense editor.

I am exhausted  ???

...
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Pierre Bellisle

Champagne...  :-)

Frederick J. Harris

Glad you managed it Patrice!  Take a day off and enjoy the Spring!  Its beautiful here today.

Fred

Patrice Terrier

#3
I have started to work on optimization, and so far i have been able to get these results

32-bit C/C++ original translation 288 Kb ---> down to 237 Kb (saving 51 Kb)
64-bit C/C++ original translation 460 Kb ---> down to 387 Kb (saving 73 Kb)

GDImage.dll PowerBASIC 9.05, 32-bit version: 353 Kb.
(I do not use version 10.04 for GDImage production, because it produces larger code)

And you know what, it seems to be amazingly fast (probably the result of my very liberal use of pointers, and because i am using only the FLAT API).

8)
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Charles Pegge

Hi Patrice, What kinds of optimisation are you performing on your code?

Patrice Terrier

#5
Charles--

I am exporting using only "C" like this:
extern "C" _declspec (dllexport)

rather than that
extern _declspec (dllexport)

also while i keep using wstring internaly, i always use WCHAR* for IN/OUT parameters (and for compatibility with the other languages i am working with).
I avoid to use any class encapsulation, except for the use of <vector> to deal with dynamic array.
And i am using const rather than #define.


Here is my GDImage header that is 32-64-bit compatible:

#include <windows.h>
#include <iostream>
using namespace std;

const wchar_t   *GDImageClassName   = L"ZIMAGECTRL";
const wchar_t   *GLImageClassName   = L"ZOPENGLCTRL";

const int METADATA_SIZE   = 2048;

struct ZOBJECT {
    long     id;           // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SIZEOF(ZOBJECT) - 131 + 1
    long     clone;        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< SIZEOF(ZOBJECT) - 42 + 1

    HWND     hwnd;
    long     objtype;
    long     metacount;
    BYTE     metadata[METADATA_SIZE];

    WCHAR    usefont[64];
    long     usesize;
    LONG_PTR fontfam;
    LONG_PTR curfont;
    long     strformat;
    long     argb;
    short    use3d;
    long     x1;
    long     y1;
    long     x2;
    long     y2;
    BYTE     visible;
    long     order;
    BYTE     locked;

    long     style;
    HBITMAP  bitmap;
    HRGN     region;
    WCHAR    objlabel[64];
    long     xcapture;
    long     ycapture;
    float    scale;
    long     xp;
    long     yp;
    WORD     angle;
    BYTE     quality;
    BYTE     flipmode;
    BYTE     userotate;
    BYTE     selected;
    BYTE     hidden;

    BYTE     brightness;
    BYTE     contrast;
    BYTE     red;
    BYTE     green;
    BYTE     blue;
    BYTE     hue;

    BYTE     framecount;
    BYTE     frametouse;

    BYTE     anchor;
    long     left;
    long     top;
    long     right;
    long     bottom;
    long     centerx;
    long     centery;

    long     linked;

    char     reserved[39];
}; // Total 2528 bytes in 64-bit, 2496 in 32-bit.

struct ZSLIDESHOW {
    WCHAR fullname[MAX_PATH];
    long  delay;
    short effect;
    short grain;
    WCHAR legend[128];
    WCHAR fontname[64];
    short fontsize;
    long  fontcolor;
    BYTE  shadow;
    BYTE  location;
    long  backcolor;
};

const int NM_LASTSLIDE = -23;
// Transition effects
const int ZE_EFFECT_MIN                 = 0;  //
const int ZE_TRANSLUCENT_SPIRAL         = 0;  // Translucent spiral (uGrain to adjust speed).
const int ZE_SMOOTH_FADING              = 1;  // Smooth fading (uGrain to adjust speed).
const int ZE_MOVE_BOTTOM_TO_TOP         = 2;  // Moving from bottom to top (uGrain to adjust speed).
const int ZE_VERTICAL_LINE              = 3;  // Vertical line (use uGrain to change space between lines).
const int ZE_VERTICAL_LINE_FILLED_RIGHT = 4;  // Vertical line (use uGrain to change space between lines).
const int ZE_CHECKER_BOARD              = 5;  // Checker board (use uGrain for larger square).
const int ZE_RANDOM_DOT                 = 6;  // Random dots (use uGrain for larger dots).
const int ZE_WIPE_TO_CENTER             = 7;  // Wipe to center (uGrain to adjust speed).
const int ZE_STRETCH_FROM_CENTER        = 8;  // Stretch from center (uGrain to adjust speed).
const int ZE_PUSH_LEFT_TO_RIGHT         = 9;  // Push from left to right (uGrain to adjust speed).
const int ZE_PUSH_TOP_TO_BOTTOM         = 10; // Push from top to bottom (uGrain to adjust speed).
const int ZE_NO_EFFECT                  = 11; // Cut mode (no transition effect).
const int ZE_EFFECT_MAX                 = 11;
// Legend location
const int ZE_TXT_TOP_LEFT               = 1;  // Text on the top, left justified.
const int ZE_TXT_TOP_CENTER             = 2;  // Text on the top, centered.
const int ZE_TXT_TOP_RIGHT              = 3;  // Text on the top, right justified.
const int ZE_TXT_MIDDLE_CENTER          = 4;  // Text on the middle, centered.
const int ZE_TXT_BOTTOM_LEFT            = 5;  // Text on the bottom, left justified.
const int ZE_TXT_BOTTOM_CENTER          = 0;  // Text on the bottom, centered.
const int ZE_TXT_BOTTOM_RIGHT           = 6;  // Text on the bottom, right justified.

struct ZPOLYGON {
    LPPOINTS pXY;        // 32-bit unsigned POINTS PTR
    short    ArraySize;  // 16-bit signed SHORT integer
    long     ObjID;      // 32-bit signed LONG integer
    long     ColorARGB;  // 32-bit signed LONG integer
    short    PenSize;    // 16-bit signed SHORT integer
    long     ZS_Style ;  // 32-bit signed LONG integer
    long     ZD_Style;   // 32-bit signed LONG integer
};

struct ZGLTEXTUREX {
    long  ID;
    WCHAR FullName[MAX_PATH];
    long  Texture;
    long  Square;  // boolean TRUE or FALSE value
};

struct ZGLFONT {
    WCHAR fontName[64];
    long  fontBase;
    long  charStart;
    long  charNum;
    long  fontHeight;
    long  fontWeight;
    HFONT fontHandle;
};

// See below the list of GDImage properties:
// Note: Constants prefixed with %ZI_ are for IMAGE control
const int ZI_DC                 = 1;    // Internal DC
const int ZI_Bitmap             = 2;    // Memory Bitmap
const int ZI_Horizontal         = 3;    // Horizontal scrolling position
const int ZI_Vertical           = 4;    // Vertical scrolling position
const int ZI_GradientTop        = 5;    // Top gradiant color backgroud
const int ZI_GradientBottom     = 6;    // Bottom gradiant color backgroud

const int ZI_FitToWindow        = 7;    // Resize the image to fit the view port
const int    ZI_QualityDefault  = -1;   // And use any of this constant as Parameter
const int    ZI_QualityGood     = 1;    // Best performance
const int    ZI_QualityHigh     = 2;    // Best rendering quality
// DO NOT use or alter these properties!
const int ZI_PaintDC            = 8;    // Internal DC
const int ZI_PaintBitmap        = 9;    // Memory Bitmap
const int ZI_Reserved           = 10;   // Animated frame parameters : LOWRD = FrameWidth, HIWRD = FrameCount

const int ZI_ZoomWindow         = 11;   // Version 1.41
const int ZI_ZoomFactor         = 12;   // Version 1.41
const int ZI_Orientation        = 13;   // Version 1.41

const int ZI_FlagByte           = 14;   // Version 2.00 4 bytes reserved for flag
const int    TOOL_CROP          = 1;    // Stored in the first byte
const int    TOOL_CUTTER        = 2;    // Stored in the first byte
const int    TOOL_PENCIL        = 4;    // Stored in the first byte
const int    TOOL_FLOOD         = 8;    // Stored in the first byte
const int    TOOL_AIRBRUSH      = 16;   // Stored in the first byte
const int    TOOL_PIPE          = 32;   // Stored in the first byte
const int    TOOL_MOUSE         = 64;   // Stored in the first byte
const int    TOOL_UNKNOWN       = 128;  // Stored in the first byte

const int Extend_cbWndExtra     = ZI_FlagByte;

const int ZI_GDIPLUSHANDLE      = 1;    // Load GDIPLUS Image handle

const int ZI_GLDC               = 8;    // OpenGL Device Context
const int ZI_GLRC               = 9;    // OpenGL Rendering Context

const int ZD_TRANSCOLOR         = 0XFF00FF;
const int ZD_ARGBTRANSCOLOR     = 0XFFFF00FF;
const int ZD_MAPCOLORFROM       = 0x807F80;   // Maping color for 32-bit alphablending
const int ZI_MAPCOLORFROM       = 0xFF807F80; // Maping color for 32-bit alphablending
const int ZI_MAPCOLORTO         = 0xFF808080; // Maping color for 32-bit alphablending
const int ZI_MAPCOLORNULL       = 0x00807F80; // Maping color for 32-bit alphablending
const int ZI_MAPTRANSCOLOR      = 0x807F80;   // Transparent maped color for 32-bit alphablending
const int ZM_Size               = 2025;       // WM_USER + 1001
const int ZM_Crop               = 2026;       // WM_USER + 1002
const int ZM_CENTER_DIALOG      = 2027;       // WM_USER + 1003
const int ZM_CropRedEye         = 2028;       // WM_USER + 1004

// ZD_DrawText constants
const int ZD_TextHorzUp         = 0;          // Horizontal text orientation
const int ZD_TextVertUp         = 4;          // Vertical text orientation from bottom to top
const int ZD_TextVertDn         = 8;          // Vertical text orientation from top to bottom

const int ZD_HIDE               = 0;          // FALSE
const int ZD_SHOW               = 1;          // TRUE
const int ZS_HIDDEN             = ZD_HIDE;
const int ZS_VISIBLE            = ZD_SHOW;    // VISIBLE, same as WS_VISIBLE
const int ZS_SCROLL             = 2;          // MOVE with scroll bars, default is FIX (do not scroll)
const int ZS_DRAFT              = 4;

const int ZD_ORDER_TOP          = 0xFFFFFF;
const int ZD_ORDER_BOTTOM       = 0xFFFF;

const int ZD_Normal             = 0; // Orientation unchanged (default)
const int ZD_Flip               = 1; // Swap top / bottom
const int ZD_Reverse            = 2; // Swap left / right

const int DRAW_OUTLINE          = 1;
const int DRAW_FILLED           = 2;
const int DRAW_3DIN             = 3;
const int DRAW_3DOUT            = 4;
const int DRAW_OPEN             = 5;

const int OBJECT_TEXT           = 1;
const int OBJECT_ELLIPSE        = 2;
const int OBJECT_RECT           = 3;
const int OBJECT_CURVE          = 4;
const int OBJECT_ARROW          = 5;
const int OBJECT_POLYLINE       = 6;
const int OBJECT_BITMAP         = 7;
const int OBJECT_BEZIER         = 8;
const int OBJECT_POLYPOLYGON    = 9;
const int OBJECT_TEXTBITMAP     = 10;

const int Frame_DimensionTime        = 0;
const int Frame_DimensionResolution  = 1;
const int Frame_DimensionPage        = 2;

const int ColorAdjustTypeDefault     = 0;
const int ColorMatrixFlagsDefault    = 0;
const int ColorAdjustTypeBitmap      = 1;

const int ANCHOR_NONE                = 0;
const int ANCHOR_LEFT                = ANCHOR_NONE;
const int ANCHOR_WIDTH               = 1;
const int ANCHOR_RIGHT               = 2;
const int ANCHOR_CENTER_HORZ         = 3;
const int ANCHOR_HEIGHT              = 4;
const int ANCHOR_HEIGHT_WIDTH        = 5;
const int ANCHOR_HEIGHT_RIGHT        = 6;
const int ANCHOR_BOTTOM              = 7;
const int ANCHOR_BOTTOM_WIDTH        = 8;
const int ANCHOR_BOTTOM_RIGHT        = 9;
const int ANCHOR_CENTER_HORZ_BOTTOM  = 10;
const int ANCHOR_CENTER_VERT         = 11;
const int ANCHOR_CENTER_VERT_RIGHT   = 12;
const int ANCHOR_CENTER              = 13;

const double PI = 3.141592653589793238462;
const double HalfPI = 1.5707963267948965;
const double PiDiv4 = 0.785398163397448;
const float Tension = 0.33f;

#define Export extern _declspec (dllexport)
#define ExportC extern "C" _declspec (dllexport)

//Export wstring    UCASE$(IN wstring sBuf);
//Export wstring    LCASE$(IN wstring sBuf);
//Export wstring    LTRIM$(IN wstring sBuf, IN wstring sChar);
//Export wstring    RTRIM$(IN wstring sBuf, IN wstring sChar);
//Export wstring    TRIM$(IN wstring sBuf, IN wstring sChar);
//Export wstring    LEFT$(IN wstring sBuf, IN long nLeft);
//Export wstring    RIGHT$(IN wstring sBuf, IN long nRight);
//Export wstring    MID$(IN wstring sBuf, IN long nStart, IN long nMid);
//Export wstring    PARSE$(IN wstring sMain, IN wstring sDelim, IN long nIndex);
//Export wstring    NAMEX$(IN wstring sBuf);
//Export wstring    EXTRACT$(IN long nIndex, IN wstring sMain, IN wstring sSearch);
//Export wstring    HEX$(IN long nVal);
//Export wstring    zDateTime();

ExportC WCHAR*    zGetTempPath();
ExportC WCHAR*    zExeName ();

ExportC WCHAR*    ZD_GetObjectImageLabel (IN long ObjID);
ExportC WCHAR*    ZI_SetSaveExtension (IN WCHAR* sExtension, IN long RW);
ExportC WCHAR*    ZI_ChooseSaveFileName (IN HWND hDlg, IN WCHAR* sPicFile);
ExportC WCHAR*    ZI_GetExifDTOrig (IN WCHAR* ImgName);
ExportC WCHAR*    ZI_GetImageInfoString (IN LONG_PTR img, IN long nProperty);
ExportC WCHAR*    ZI_SetLoadExtension (IN WCHAR* sExtension, IN long RW);
ExportC WCHAR*    ZI_LoadSavePath (IN WCHAR* sPath, IN long RW);
ExportC WCHAR*    ZI_LoadDialog (IN HWND hDlg);
ExportC WCHAR*    ZI_Version();
ExportC WCHAR*    zGetReg (IN HKEY hLocation, IN WCHAR* sSubKeys, IN WCHAR* sValueName);
ExportC long      zSetReg (IN HKEY hLocation, IN WCHAR* SubKeys, IN WCHAR* sRegName, IN WCHAR* RegVal);

ExportC long      INSTR(IN long fromPos, IN WCHAR* sMain, IN WCHAR* sSearch);
ExportC long      LongVAL(IN WCHAR* sNum);
ExportC double    FloatVAL(IN WCHAR* sNum);
ExportC long      RegisterGLImageClass();
ExportC long      RegisterGDImageClass();
ExportC HINSTANCE zInstance();
ExportC BOOL      zExist (IN WCHAR* sFileSpec);
ExportC LONG_PTR  zGdipStart ();
ExportC void      zGdipEnd (IN LONG_PTR hGDIplus);
ExportC void      zSplitColorARGB (IN long ARGB, OUT BYTE &A, OUT BYTE &R, OUT BYTE &G, OUT BYTE &B);
ExportC long      zStretchBlt (IN HDC hDCdst, IN long xDst, IN long yDst, IN long wDst, IN long hDst, IN HDC hDCsrc, IN long xSrc, IN long ySrc, IN long wSrc, IN long hSrc, IN long dwRop);
ExportC HBITMAP   zCreateDIBSection (IN HDC hDC, IN long nWidth, IN long nHeight, IN long nBitCount);
ExportC LONG_PTR  zLoadImageFromFile (IN WCHAR* sImgName, OUT long &imgW, OUT long &imgH, IN long nOrientation);
ExportC void      zKeyBd_Event (IN BYTE K1, IN BYTE K2);
ExportC void      zFocusBeep ();
ExportC void      zDrawImage (IN HDC hDC, IN LONG_PTR Img, IN long x, IN long y, IN long xW, IN long yH);
ExportC void      zAlphaBlend (IN HDC hDCdest, IN long xD, IN long yD, IN long wD, IN long hD, IN HDC hDCsrce, IN long xS, IN long yS, IN long wS, IN long hS);
ExportC LONG_PTR  zBitmapToImage (IN HDC hDC);
ExportC long      zFOpen (IN WCHAR* sFilName, IN long AccessMode, IN long ShareMode, OUT HANDLE &hFile);
ExportC DWORD     zFlof (IN HANDLE hFile);
ExportC long      zFGet (IN HANDLE hFile, OUT string &sBuffer);
ExportC void      zFClose (OUT HANDLE &hFile);
ExportC void      DrawGLSphere (IN float rRadius, IN long nFirst, IN long nLast);
ExportC void      zSplitN (IN WCHAR* sFullName, OUT WCHAR* sPathName, OUT WCHAR* sFilName);
ExportC long      zKillFile (IN WCHAR* sFullName);
ExportC long      zSaveImageToFile (IN WCHAR* sPicFile, IN LONG_PTR Img, IN long nQuality);
ExportC long      zGetCPUspeed ();
ExportC BYTE      Rgb2Alpha (IN DWORD colrRGB);
ExportC HWND      zClockCtrl (IN HWND hOwner, IN WCHAR* zFullpathImageName, IN long x, IN long y, IN long w, IN long h, IN long nID, IN long ARGB1, IN long ARGB2, IN long GMT);
ExportC LONG_PTR  zCloneImage (IN LONG_PTR img);
ExportC HWND      WGL_CreateWindow (IN DWORD dwExStyle, IN DWORD dwStyle, IN long x, IN long y, IN long nWidth, IN long nHeight, IN HWND hWndParent, IN HMENU CtrlID);

ExportC void      GL_DrawCubeBackFace (IN long nTexture);
ExportC void      GL_DrawCubeTopFace (IN long nTexture);
ExportC void      GL_DrawCubeBottomFace (IN long nTexture);
ExportC void      GL_DrawCubeRightFace (IN long nTexture);
ExportC void      GL_DrawCubeLeftFace (IN long nTexture);
ExportC void      GL_DrawCube (IN long nTexture);
ExportC void      GL_DrawCylinder (IN float radius, IN float rValue, IN float R1, IN float R2, IN long nTexture);
ExportC void      GL_DrawDisk (IN float radius, IN long nTexture);
ExportC void      GL_DrawSphere (IN float radius, IN long nTexture);
ExportC void      GL_DrawCubeFrontFace (IN long nTexture);
ExportC void      GL_CreateContext (IN long nWidth, IN long nHeight);
ExportC void      GL_DeleteContext (OUT HDC &hGLDC, OUT HGLRC &hGLRC);
ExportC void      GL_AlphaBlend (IN HDC hDCdest, IN HDC hDCsrce);
ExportC HDC       GL_GLDC ();
ExportC HGLRC     GL_GLRC ();
ExportC HDC       GL_CreateDrawingDC (IN long nWidth, IN long nHeight);
ExportC void      GL_DrawText (IN HWND glWnd, IN ZGLFONT UseFont, IN float x, IN float y, IN float z, IN WCHAR* sTxt, IN long ARGB);
ExportC long      GL_CreateFontTexture (IN HWND glWnd, IN WCHAR* sUseFont, IN long nFontSize, IN long ColrARGB);
ExportC void      GL_ChartLabel (IN HWND glWnd, IN long UseFont, IN float rX, IN float rY, IN float rZ, IN WCHAR* sTxt);
ExportC void      GL_ChartSymbol (IN HWND glWnd, IN long UseFont, IN float rX, IN float rY, IN float rZ, IN WCHAR* sTxt);
ExportC float     GL_ChartGetTextLength (IN long UseFont, IN WCHAR* sTxt);
ExportC void      GL_DrawCup (IN float rRadius, IN long nTexture);
ExportC void      GL_DrawDome (IN float rRadius, IN long nTexture);
ExportC long      GL_GetActiveTexture ();
ExportC void      GL_TexSpec (IN long nMode);
ExportC void      GL_Specular (IN long nMode);
ExportC long      GL_GetSpecularMode ();
ExportC void      GL_ChartAxisPanel (IN float rX, IN float rY, IN float rZ);
ExportC void      GL_ChartRing (IN float RING_MINOR, IN float RING_MAJOR, IN float RING_MINOR_RES, IN float RING_MAJOR_RES);
ExportC WCHAR*    GL_ChartGetFontName (IN long UseFont);
ExportC void      GL_UseMouseManager (IN HWND hWnd);
ExportC void      GL_ChartBar (IN float rX, IN float rY, IN float rZ);
ExportC void      GL_ChartPyramide (IN float rX, IN float rZ);
ExportC void      GL_Cylinder (IN float radiusBottom, IN float radiusTop, IN float height, IN long slices, IN long stacks, IN long UseOperculum);
ExportC void      GL_ChartCylinder (IN float radius, IN float height, IN long slices, IN long stacks);
ExportC void      GL_ChartCone (IN float radius, IN float height, IN long slices, IN long stacks);
ExportC void      GL_DrawQuad (IN float x, IN float y, IN float z);
ExportC void      GL_ChartAxis (IN float rX, IN float rY, IN float rZ);
ExportC void      GL_ChartGetMousing (OUT float &rChartXoff, OUT float &rChartYoff, OUT float &rChartZoff, OUT float &rChartZoom, OUT float &rChartXrot, OUT float &rChartYrot);
ExportC void      GL_ChartSetMousing (IN float rChartXoff, IN float rChartYoff, IN float rChartZoff, IN float rChartZoom, IN float rChartXrot, IN float rChartYrot);
ExportC void      GL_ChartSphere (IN float rRadius, IN float rValue, IN long nCompile);
ExportC void      GL_DeleteTextureFont (IN HWND hWnd);
ExportC void      GL_BillBoard ();
ExportC void      GL_ChartPoint (IN float Radius, IN float rValue);
ExportC float     GL_ChartXoff (IN float rValue, IN long RW);
ExportC float     GL_ChartYoff (IN float rValue, IN long RW);
ExportC float     GL_ChartZoff (IN float rValue, IN long RW);
ExportC float     GL_ChartXrot (IN float rValue, IN long RW);
ExportC float     GL_ChartYrot (IN float rValue, IN long RW);
ExportC float     GL_ChartZoom (IN float rValue, IN long RW);
ExportC long      GL_MultiSampleARB ();

ExportC BYTE      ZD_GetObjectFrameCount (IN long ObjID);
ExportC void      ZD_SetObjectFrameCount (IN long ObjID, IN BYTE nCount);
ExportC BYTE      ZD_GetObjectFrameToUse (IN long ObjID);
ExportC void      ZD_SetObjectFrameToUse (IN long ObjID, IN long nFrameToUse, IN long RedrawParent);
ExportC long      ZD_ComputeObjectAngleFromPoint (IN long nObjectID, IN long mX, IN long mY);
ExportC long      ZD_GetObjectLinked (IN long ObjID);
ExportC void      ZD_SetObjectLinked (IN long ObjID, IN long LinkedID);
ExportC void      ZD_MoveLinkedObject (IN long ObjID, IN long x, IN long y, IN long RedrawParent);
ExportC void      ZD_RemoveRedEyeFromBitmapObject (IN long nObjectID, IN long xEye, IN long yEye, IN long EyeWidth, IN long EyeHeight);
ExportC void      ZD_ShowObjectList (IN long* IDlist, IN long ArraySize, IN BYTE ShowOrHide);
ExportC BYTE      ZD_GetObjectBrightness (IN long ObjID);
ExportC void      ZD_SetObjectBrightness (IN long ObjID, IN BYTE Brightness, IN long RedrawParent);
ExportC BYTE      ZD_GetObjectContrast (IN long ObjID);
ExportC void      ZD_SetObjectContrast (IN long ObjID, IN BYTE Contrast, IN long RedrawParent);
ExportC BYTE      ZD_GetObjectRed (IN long ObjID);
ExportC void      ZD_SetObjectRed (IN long ObjID, IN BYTE nRed, IN long RedrawParent);
ExportC BYTE      ZD_GetObjectGreen (IN long ObjID);
ExportC void      ZD_SetObjectGreen (IN long ObjID, IN BYTE nGreen, IN long RedrawParent);
ExportC BYTE      ZD_GetObjectBlue (IN long ObjID);
ExportC void      ZD_SetObjectBlue (IN long ObjID, IN BYTE nBlue, IN long RedrawParent);
ExportC BYTE      ZD_GetObjectHue (IN long ObjID);
ExportC void      ZD_SetObjectHue (IN long ObjID, IN BYTE nHue, IN long RedrawParent);
ExportC HBITMAP   ZD_RenderEffectToBitmapObject (IN long nObjectID, IN long nRedrawParent);
ExportC long      ZD_TwinObject (IN long IDtoTwin, IN long TwinID, IN long x, IN long y);
ExportC long      ZD_CloneObject (IN long IDtoClone, IN long CloneID, IN long x, IN long y);
ExportC void      ZD_SetObjectScale (IN long ObjID, IN float ScaleValue);
ExportC float     ZD_GetObjectScale (IN long ObjID);
ExportC void      ZD_SetStringFormat (IN long ObjID, IN long StrFormat, IN long RedrawParent);
ExportC long      ZD_GetStringFormat (IN long ObjID);
ExportC BYTE      ZD_GetObjectAlpha (IN long ObjID);
ExportC void      ZD_FlipObjectX (IN long nID);
ExportC void      ZD_FlipObjectY (IN long nID);
ExportC void      ZD_SetObjectFlipMode (IN long ObjID, IN long nOrientation);
ExportC void      ZD_ReplaceObjectBitmap (IN HBITMAP hBitmap, IN long ObjID, IN long RedrawParent);
ExportC long      ZD_GetObjectRotation (IN long ObjID);
ExportC void      ZD_RotateObjectCounterclock90 (IN long ObjID);
ExportC void      ZD_RotateObjectClockWise90 (IN long ObjID);
ExportC long      ZD_GetObjectType (IN long ObjID);
ExportC void      ZD_SetObjectType (IN long ObjID, IN long ObjectType);
ExportC long      ZD_GetObjectAngle (IN long ObjID);
ExportC void      ZD_SetObjectAngle (IN long ObjID, IN long AngleDegree, IN long RedrawParent);
ExportC long      ZD_GetObjectQuality (IN long ObjID);
ExportC void      ZD_SetObjectQuality (IN long ObjID, IN long nQuality, IN long RedrawParent);
ExportC void      ZD_SetObjectClone (IN long ObjID, IN long CloneID);
ExportC long      ZD_GetObjectClone (IN long ObjID);
ExportC HBITMAP   ZD_SetObjectBitmapFromFile (IN WCHAR* sImgName, IN long ObjID, IN long RedrawParent);
ExportC void      ZD_SetObjectBitmapFromBitmap (IN HBITMAP hBitmap, IN long ObjID, IN long RedrawParent);
ExportC HBITMAP   ZD_CreateBitmapFromText (IN WCHAR* sUseText, IN WCHAR* sUseFont, IN long UseSize, IN long ColrARGB, IN short Use3D, IN long UseStrFormat);
ExportC void      ZD_SetObjectUse3Dshadow (IN long ObjID, IN short Use3D);
ExportC short     ZD_GetObjectUse3Dshadow (IN long ObjID);
ExportC HBITMAP   ZD_GetObjectBitmap (IN long ObjID);
ExportC void      ZD_GetObjectProperties (IN long nID, OUT ZOBJECT &zDetail);
ExportC void      ZD_SetObjectProperties (IN long nID, IN ZOBJECT zDetail);
ExportC void      ZD_GetObjectXYcapture (IN long ObjID, OUT long &x, OUT long &y);
ExportC void      ZD_CopyToBackground (IN HWND hWnd, IN long ID, IN long BoolClear, IN long RGBColor);
ExportC long      ZD_IsObjectHidden (IN long ObjID);
ExportC void      ZD_SetObjectHidden (IN long ObjID, IN BYTE OnOff);
ExportC long      ZD_ObjectMouseCaptured ();
ExportC void      ZD_SetObjectImageLabel (IN long ObjID, IN WCHAR* sUseText);
ExportC void      ZD_SetObjectScroll (IN long ObjID, IN long TrueFalse);
ExportC long      ZD_GetObjectScroll (IN long ObjID);
ExportC void      ZD_SetObjectLocked (IN long ObjID, IN long TrueFalse);
ExportC long      ZD_GetTextBound (IN WCHAR* sUseText, IN WCHAR* sUseFont, IN long UseSize, OUT long &TextWidth, OUT long TextHeight, IN long UseStrFormat);
ExportC long      ZD_DrawTextToDC (IN HDC hDC, IN WCHAR* sUseText, IN long x, IN long y, IN long ColrARGB,
                                   IN WCHAR* sUseFont, IN long UseSize, IN short Use3D, IN long UseStrFormat);
ExportC long      ZD_SetObjectText (IN long ObjID, IN WCHAR* sUseText);
ExportC long      ZD_SetObjectTextEx (IN long ObjID, IN WCHAR* sUseText);
ExportC long      ZD_DrawTextToCtrl (IN HWND hCtrl, IN WCHAR* sUseText, IN long x, IN long y, IN long ColrARGB,
                                     IN WCHAR* sUseFont, IN long UseSize, IN long ObjID, IN long ZS_STYLE, IN short Use3D, IN long UseStrFormat);
ExportC long      ZD_DrawRectangleToCtrl (IN HWND hCtrl, IN long ox1, IN long oy1, IN long ox2, IN long oy2, IN long ColrARGB,
                                          IN long BorderSize, IN long ObjID, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC long      ZD_DrawArrowToCtrl (IN HWND hCtrl, IN long ox1, IN long oy1, IN long ox2, IN long oy2, IN long ColrARGB,
                                      IN long BorderSize, IN long ObjID, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC long      ZD_DrawEllipseToCtrl (IN HWND hCtrl, IN long ox1, IN long oy1, IN long ox2, IN long oy2, IN long ColrARGB,
                                        IN long BorderSize, IN long ObjID, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC long      ZD_DrawBitmapToCtrl (IN HWND hCtrl, IN long ox1, IN long oy1, IN HBITMAP hBitmap, IN long ColrARGB, IN long ObjID, IN long ZS_STYLE);
ExportC long      ZD_DrawTextBitmapToCtrl (IN HWND hCtrl, IN long ox1, IN long oy1, IN HBITMAP hBitmap, IN long ColrARGB, IN long ObjID, IN long ZS_STYLE);
ExportC long      ZD_DrawCurveToCtrl (IN HWND hCtrl, IN POINTS* pXY, IN long ArraySize,
                                      IN long ColrARGB, IN long BorderSize, IN long ObjID, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC long      ZD_DrawPolyLineToCtrl (IN HWND hCtrl, IN POINTS* pXY, IN long ArraySize,
                                         IN long ColrARGB, IN long BorderSize, IN long ObjID, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC HWND      ZD_GetObjectParent (IN long ObjID);
ExportC void      ZD_GetObjectXY (IN long ObjID, OUT long &x, OUT long &y);
ExportC void      ZD_SetObjectXY (IN long ObjID, IN long x, IN long y, IN long RedrawParent);
ExportC void      ZD_GetObjectBound (IN long ObjID, OUT long &BoundWidth, OUT long BoundHeight);
ExportC void      ZD_GetObjectARGB (IN long ObjID, OUT BYTE &A, OUT BYTE &R, OUT BYTE &G, OUT BYTE &B);
ExportC long      ZD_GetObjectARGBcolor (IN long ObjID);
ExportC void      ZD_GetObjectARGB (IN long ObjID, OUT BYTE &A, OUT BYTE &R, OUT BYTE &G, OUT BYTE &B);
ExportC void      ZD_SetObjectARGBcolor (IN long ObjID, IN long UseARGB);
ExportC void      ZD_SetObjectAlpha (IN long ObjID, IN BYTE Alpha, IN long RedrawParent);
ExportC void      ZD_ShowObject (IN long ObjID, IN long ShowOrHide);
ExportC void      ZD_SetObjectVisibility (IN long ObjID, IN long ShowOrHide);
ExportC long      ZD_IsObjectVisible (IN long ObjID);
ExportC long      ZD_GetObjectStyle (IN long ObjID);
ExportC void      ZD_SetObjectStyle (IN long ObjID, IN long UseStyle);
ExportC long      ZD_GetObjectZorder (IN long ObjID);
ExportC long      ZD_GetItemObjectAndColorAtXY (IN HWND hGDImageCtrl, IN long lpx, IN long lpy, OUT long &RGBcolor);
ExportC long      ZD_GetBitmapObjectBits (IN long ObjID, LPVOID lpArray);
ExportC long      ZD_SetBitmapObjectBits (IN long ObjID, LPVOID lpArray);
ExportC long      ZD_GetObjectFlipMode (IN long ObjID);
ExportC long      ZD_SetObjectZorder (IN long ObjID, IN long SetOrder);
ExportC long      ZD_PolyPolygon (IN HWND hCtrl, IN ZPOLYGON* zp, IN long PolygonCount);
ExportC long      ZD_StretchBlt (IN HDC hDCdst, IN long xDst, IN long yDst, IN long wDst, IN long hDst, IN HDC hDCsrc, IN long xSrc, IN long ySrc, IN long wSrc, IN long hSrc);
ExportC void      ZD_DeleteObject (IN long ID);
ExportC long      ZD_SetObjectAnchorMode (IN long nObjID, IN long AnchorMode);
ExportC long      ZD_GetObjectLocked (IN long ObjID);
ExportC long      ZD_GetObjectSelected (IN long ObjID);
ExportC void      ZD_SetObjectSelected (IN long ObjID, IN long OnOff, IN long RedrawParent);   
ExportC void      ZD_ChangeTextFontSize (IN HWND hCtrl, IN long ObjID, IN long UseSize);
ExportC void      ZD_FillRect (IN HDC hDC, IN long x, IN long y, IN long xW, IN long yH, IN long RGBcolor);
ExportC long      ZD_ColorARGB (IN BYTE Alpha, IN DWORD ColrRGB);
ExportC long      ZD_ARGB (IN BYTE A, IN BYTE R, IN BYTE G, IN BYTE B);

ExportC long      ZI_LoadDLL (IN WCHAR* sUserName);
ExportC long      ZI_CreateSkinBackgroundEx (IN WCHAR* sImageDest, IN long rwX, IN long rwY, IN WCHAR* sUseBackground, IN WCHAR* sSkinFolder,
                                             IN long UseStretchMode, IN long IsResizable, IN long nOverlayColor);
ExportC long      ZI_CreateSkinBackground (IN WCHAR* sImageDest, IN long rwX, IN long rwY, IN WCHAR* sUseBackground, IN WCHAR* sSkinFolder);
ExportC long      ZI_SetImageFileOrientation (IN WCHAR* sImageSrce, IN long nOrientation);
ExportC LONG_PTR  ZI_SetImageAttributesHue (IN BYTE Hue);
ExportC HBITMAP   ZI_CreateDIBSection (IN HDC hDC, IN long nWidth, IN long nHeight, IN long BitCount);
ExportC void      ZI_RemoveRedEye (IN HDC hDC, IN long x, IN long y, IN long UseWidth, IN long UseHeight);
ExportC void      ZI_CreateTextObject (OUT ZOBJECT &zObj, IN WCHAR* sUseText, IN long x, IN long y, IN long xW, IN long yH, IN long ColrARGB,
                                       IN WCHAR* sUseFont, IN long UseSize, IN long ZS_STYLE, IN short Use3D, IN long UseStrFormat);
ExportC void      ZI_CreateCurveObject (OUT ZOBJECT &zObj, IN POINTS* pXY, IN long ArraySize, IN long ColrARGB, IN long BorderSize, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC void      ZI_CreatePolyLineObject (OUT ZOBJECT &zObj, IN POINTS* pXY, IN long ArraySize, IN long ColrARGB, IN long BorderSize, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC HBITMAP   ZI_CreateImageComposited (IN WCHAR* sImageDest, IN long rwX, IN long rwY, IN ZOBJECT* pSprite, IN long N);;
ExportC long      ZI_GetImageInfoCount (IN LONG_PTR img);
ExportC long      ZI_RemoveImageInfoProperty (IN LONG_PTR img, IN long nID);
ExportC long      ZI_UpdateNamedGLTextureFromFileEx (IN WCHAR* sFullName, IN long NamedTexture, IN long nSquareMode);
ExportC void      ZI_ReplaceARGBColorBitmap (IN HBITMAP hBmp, IN long WasARGB, IN long NewARGB);
ExportC void      ZI_GetDefaultPrinter (OUT WCHAR* &sDriver, OUT WCHAR* &sDevice, OUT WCHAR* &sPort);
ExportC long      ZI_PrintImage (IN HWND hGDImageCtrl);
ExportC long      ZI_PrintFull (IN HWND hGDImageCtrl);
ExportC void      ZI_SlidePlayIncrOrder ();
ExportC void      ZI_SlidePlayDecrOrder ();
ExportC void      ZI_SlidePlay ();
ExportC void      ZI_SlidePause ();
ExportC void      ZI_SlideAnimate (IN HWND hCtrl, IN ZSLIDESHOW* ipt, IN long ImageCount, IN BYTE LoopMode);
ExportC long      ZI_FontBox (IN HWND hParent, IN WCHAR* sCaption, OUT WCHAR* &sUseText, OUT WCHAR* &sUseFont, OUT long &UseSize, OUT long &UseARGB, OUT long &Use3D);
ExportC HBITMAP   ZI_CreateBitmapFromImage (IN LONG_PTR hImage);
ExportC long      ZI_ApplyEffectToFile (IN WCHAR* sImageSrce, IN ZOBJECT zObj, IN WCHAR* sImageDest);
ExportC HWND      ZI_CreateDW (IN HWND hParent);
ExportC void      ZI_DestroyDW (IN HWND hDW);
ExportC void      ZI_ImageTilePaint (IN LONG_PTR graphics, IN LONG_PTR img, IN long xOffset, IN long yOffset, IN long nPaintWidth, IN long nPaintHeight);
ExportC void      ZI_ComputeAspect (IN long xPic, IN long yPic, IN long xCell, IN long yCell, OUT long &xP, OUT long &yP, OUT long &xS, OUT long &yS);
ExportC long      ZI_SIZEL (IN long nSize, IN long RW);
ExportC long      ZI_SIZET (IN long nSize, IN long RW);
ExportC long      ZI_SIZER (IN long nSize, IN long RW);
ExportC long      ZI_SIZEB (IN long nSize, IN long RW);
ExportC long      ZI_CenterDialog (IN long nFlag, IN long RW);
ExportC long      ZI_SaveLayersDialog (IN HWND hDlg, IN HWND hCtrl, IN long nQuality, IN long Rotation, IN long UseWidth, IN long UseHeight);
ExportC long      ZI_GetCtrlObjectCount (IN HWND hParent);
ExportC void      ZI_SetToolTipText (IN HWND hObj, IN WCHAR* sText);
ExportC HWND      ZI_CreateToolTip (IN HWND hObj, IN WCHAR* sText);
ExportC long      ZI_CreateSpriteFileFromBitmap (IN WCHAR* sPicFile, IN HBITMAP BmpSrce, IN long UseSize, IN long JpegQuality);
ExportC void      ZI_EventMessageEx (IN HWND hWnd, IN LONG_PTR pCodePtr, IN long nMsg, IN long SetReset);
ExportC long      ZI_FitImageToPaper (IN WCHAR* sImageSrce, IN long nPaperW, IN long nPaperH, IN WCHAR* sCropedImageDest);
ExportC void      ZI_SetObjectFocusID (IN long CursorOverObject);
ExportC void      ZI_SetCtrlEmptyBitmap (IN HWND hWnd, IN long RGBcolor);
ExportC void      ZI_DestroyTexture (IN ZGLTEXTUREX* mt, IN long mtCount);
ExportC HBITMAP   ZI_FitImageFromFile (IN WCHAR* sFilName, IN long Xin, IN long Yin);
ExportC long      ZI_CreateGLTextureFromFile (IN WCHAR* sFullPath, OUT long &xSize, OUT long &ySize, OUT BYTE* &lpArray);
ExportC long      ZI_SetGLTextureFromFile (IN WCHAR* sFullName);
ExportC void      ZI_InitGLControl (IN long ARGB);
ExportC void      ZI_BuildGLfont (IN HDC hDC, ZGLFONT UseFont);
ExportC void      ZI_DeleteGLFont (IN ZGLFONT UseFont);
ExportC void      ZI_DrawGLText (IN HWND glWnd, IN ZGLFONT UseFont, IN long x, IN long y, IN WCHAR* sTxt, IN long ARGB);
ExportC void      ZI_UseGLPolarView (IN float radius, IN float twist, IN float latitude, IN float longitude);
ExportC void      ZI_UseGLPanoramaView (IN float latitude, IN float longitude);
ExportC long      ZI_GetGLzoom (IN HWND hWnd);
ExportC void      ZI_SetGLzoom (IN HWND hWnd, IN long nFovy);
ExportC long      ZI_MoveToTray (IN WCHAR* sFileName);
ExportC void      ZI_ResizeGLWindow (IN HWND hWnd);
ExportC void      ZI_UpdateGLWindow (IN HWND hWnd);
ExportC void      ZI_GetGLTextExtentFromDC (IN HDC hDC, ZGLFONT UseFont, IN WCHAR* sText, OUT long &stWidth, OUT long &stHeight);
ExportC void      ZI_GetGLTextExtent (IN HWND glWnd, ZGLFONT UseFont, IN WCHAR* sText, OUT long &stWidth, OUT long &stHeight);
ExportC void      ZI_glColor4ub (IN long ARGB);
ExportC long      ZI_UpdateNamedGLTextureFromFile (IN WCHAR* sFullName, IN long NamedTexture);
ExportC void      ZI_ReplaceRGBColor (IN HDC hDC, IN long WasColor, IN long NewColor);
ExportC void      ZI_ReplaceRGBColorBitmap (IN HBITMAP hBmp, IN long WasColor, IN long NewColor);
ExportC HBITMAP   ZI_CropBitmap (IN HBITMAP hBmp, IN long x, IN long y, IN long w, IN long h, IN long FlipReverse);
ExportC long      ZI_RenderLayersToFile (IN HWND hWnd, IN WCHAR* sPicFile, IN long nQuality, IN long Rotation, IN long UseWidth, IN long UseHeight);
ExportC void      ZI_SetFontBoxParameters (IN long SquareSize, IN long MaxFontSize, IN long TextCharLength);
ExportC long      ZI_MouseHoverBoundID ();
ExportC long      ZI_GetObjectFocusID ();
ExportC long      ZI_GetMovingSpriteItem ();
ExportC long      ZI_GetMovingSpriteID ();
ExportC HBITMAP   ZI_FitImageFrom32Bit (IN WCHAR* sImgName, IN long UseW, IN long UseH);
ExportC HBITMAP   ZI_FitBitmapFromFile (IN WCHAR* sFullPath, IN long Xin, IN long Yin);
ExportC void      ZI_DoNotSquareTexture ();
ExportC long      ZI_CreateGLTextureFrom32Bit (IN WCHAR* sFullPath, OUT long &xSize, OUT long &ySize, OUT BYTE* &lpArray);
ExportC HDC       ZI_GetGLDC (IN HWND hWnd);
ExportC HGLRC     ZI_GetGLRC (IN HWND hWnd);
ExportC long      ZI_CreateGLTextureFromFileEX (IN WCHAR* sImgName, OUT long &Xin, OUT long &Yin, OUT BYTE* &lpArray, IN long SquareTexture);
ExportC void      ZI_MakeMultipleTexture (IN ZGLTEXTUREX* mt, IN long mtCount);
ExportC HBITMAP   ZI_ResizeBitmapFromBitmap (IN HBITMAP BmpSrce, IN long xDest, IN long yDest);
ExportC long      ZI_GetToolCropStatus (IN HWND hWnd);
ExportC void      ZI_EnableCropRectangle (IN HWND hWnd);
ExportC void      ZI_EnableCropRedEye (IN HWND hWnd);
ExportC void      ZI_DisableAllTools (IN HWND hWnd);
ExportC void      ZI_GetCropCoordinates (OUT long &x, OUT long &y, OUT long &UseWidth, OUT long &UseHeight);
ExportC void      ZI_SetCropPopupText (IN WCHAR* sMenu);
ExportC HBITMAP   ZI_RenderLayersToBitmap (IN HWND hWnd);
ExportC HBITMAP   ZI_CropWindowToBitmap (IN HWND hWnd, IN long x, IN long y, IN long w, IN long h);
ExportC long      ZI_ObjectSelected (IN HWND hGDImageCtrl);
ExportC long      ZI_SelectedCount (IN HWND hGDImageCtrl);
ExportC HDC       ZI_Create32bitDC (IN long nWidth, IN long nHeight, IN long ARGBcolor);
ExportC LONG_PTR  ZI_RemapImageColor (IN long nColorFrom, IN long nColorTo);
ExportC LONG_PTR  ZI_RemapAlphaColor (IN long nColorFrom, IN long nColorTo);
ExportC void      ZI_DrawAlphaBlend (IN HDC hDCdest, IN long xDest, IN long yDest, IN WCHAR* sImage, IN WCHAR* sMask);
ExportC long      ZI_CreateVariableOpacityPNG (IN WCHAR* sInputName, IN WCHAR* sOutputName);
ExportC HBITMAP   ZI_CreateVariableOpacityBitmap (IN WCHAR* sInputName, OUT long &imgW, OUT long &imgH);
ExportC void      ZI_RotateImage (IN HDC hDC, IN LONG_PTR Img, IN long x, IN long y, IN long AngleDegree, IN BYTE Alpha);
ExportC void      ZI_RenderImageRotationToWindow (IN HWND hWnd, IN LONG_PTR Img, IN long x, IN long y, IN long AngleDegree, IN BYTE UseAlpha);
ExportC HBITMAP   ZI_RenderRotationFromImageToBitmap (IN HBITMAP BmpSrce, IN LONG_PTR Img, IN long AngleDegree, IN BYTE UseAlpha);
ExportC long      ZI_SaveToFile (IN WCHAR* sPicFile, IN HWND hCtrl, IN long nQuality);
ExportC void      ZI_SetZoomScrollInfo (IN HWND hWnd, IN float OldZoomValue, IN float ZoomValue);
ExportC void      ZI_EventMessage (IN LONG_PTR pCodePtr, IN long nMsg, IN long SetReset);
ExportC long      ZI_ColorCount (IN HWND hWnd);
ExportC HBITMAP   ZI_LoadFromResource (IN HWND hWnd, IN WCHAR* sName);
ExportC long      ZI_LoadImageFromStream (IN HWND hWnd, IN BYTE* pBufferData, IN long BufferSize);
ExportC LONG_PTR  ZI_ImageFromResource (IN HMODULE nInstance, IN WCHAR* sName);
ExportC HBITMAP   ZI_LoadBitmap (IN WCHAR* sName);
ExportC LONG_PTR  ZI_SetImageAlpha (IN BYTE Alpha);
ExportC long      ZI_GetDIBits (IN HDC hDC, LPVOID lpArray);
ExportC long      ZI_SetDIBits (IN HDC hDC, LPVOID lpArray);
ExportC HBITMAP   ZI_CreateBitmapFromFile (IN WCHAR* sImgName, OUT long &imgW, OUT long &imgH);
ExportC HBITMAP   ZI_ResizeBitmapFromFile (IN WCHAR* sImgName, IN long UseW, IN long UseH);
ExportC long      ZI_SetFromFileEx (IN HWND hCtrl, IN WCHAR* sFileName, IN long nUseW, IN long nUseH);
ExportC void      ZI_DisableAlphaCoef ();
ExportC void      ZI_EnableAlphaCoef ();
ExportC HBITMAP   ZI_CreateMirrorBitmapFromFile (IN WCHAR* sImgName, OUT long &imgW, OUT long &imgH);
ExportC HDC       ZI_CreateImageBackgroundEx (IN HWND hWnd, IN long imgW, IN long imgH, IN long UseColor, IN long  BitPerPixel);
ExportC HDC       ZI_CreateImageBackground (IN HWND hWnd, IN long imgW, IN long imgH);
ExportC LONG_PTR  ZI_CreateImageFromFile (IN WCHAR* sImgName, OUT long &imgW, OUT long imgH, IN long RemoveARGBColor, IN long ARGBColorToRemove);
ExportC void      ZI_DeleteImageObject (OUT LONG_PTR &img);
ExportC long      ZI_SetTiledBackground (IN HWND hWnd, IN HBITMAP UseBitmap);
ExportC HBITMAP   ZI_GetTiledBackground (IN HWND hWnd);
ExportC void      ZI_UseWinLIFTbackground (IN HWND hWnd, IN long nUseBack, IN long RedrawParent);
ExportC long      ZI_SetCtrlBitmapBackground (IN HWND hWnd, IN HBITMAP hBmp);
ExportC long      ZI_ClipboardCopy (IN HWND hWnd);
ExportC long      ZI_PutBitmapToClipboard (IN HBITMAP ThisBitmap);
ExportC long      ZI_SaveBitmapToFile (IN WCHAR* sPicFile, IN HBITMAP hBitmap, IN long nQuality);
ExportC long      ZI_ClipboardPaste (IN HWND hWnd);     
ExportC void      ZI_CreateBitmapObject (OUT ZOBJECT &zObjItem, IN long ox1, IN long oy1, IN HBITMAP hBitmap, IN long ColrARGB, IN long ZS_STYLE);
ExportC void      ZI_CreateRectangleObject (OUT ZOBJECT &zObjItem, IN long ox1, IN long oy1, IN long ox2, IN long oy2,
                                            IN long ColrARGB, IN long BorderSize, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC void      ZI_CreateArrowObject (OUT ZOBJECT &zObjItem, IN long ox1, IN long oy1, IN long ox2, IN long oy2,
                                       IN long ColrARGB, IN long BorderSize, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC void      ZI_CreateEllipseObject (OUT ZOBJECT &zObjItem, IN long ox1, IN long oy1, IN long ox2, IN long oy2,
                                          IN long ColrARGB, IN long BorderSize, IN long ZS_STYLE, IN long ZD_STYLE, IN short Use3D);
ExportC void      ZI_SetSaveDialogMsg (IN WCHAR* sCaptionLoad, IN WCHAR* sCaptionSave, IN WCHAR* sDefaultName);
ExportC long      ZI_SetAnchorMode (IN HWND hWnd, IN long AnchorMode);
ExportC long      ZI_ConvertToGray (IN HDC hDC);
ExportC void      ZI_ClearObjectSelected (IN HWND hGDImageCtrl);
ExportC long      ZI_GetManualSelection ();
ExportC void      ZI_SetManualSelection (IN long nMode);
ExportC HWND      ZI_CreateWindowFromImage (IN long nStyle, IN WCHAR* sImgName, IN long x, IN long y, IN HWND hParent, IN long UseID, IN long nStyleEx, IN long UseTransColor);
ExportC void      ZI_GetImageSizeFromFile (IN WCHAR* sImgName, OUT long &imgW, OUT long &imgH);
ExportC long      ZI_SetLayeredAlpha (IN HWND hWnd, IN BYTE TransLevel);
ExportC void      ZI_DrawObject (IN HDC hDC, IN ZOBJECT zObjItem, IN long InPrintMode);
ExportC long      ZI_GetXscroll (IN HWND hWnd);
ExportC long      ZI_GetYscroll (IN HWND hWnd);
ExportC void      ZI_DrawObject (IN HDC hDC, IN ZOBJECT zObjItem, IN long InPrintMode);
ExportC long      ZI_BoostSprite (IN long nFlag, IN long RW);
ExportC long      ZI_TransparentColor (IN long nFlag, IN long RW);
ExportC void      ZI_RenderAttributes (IN HDC hDCdest, IN long xD, IN long yD, IN long wD, IN long hD,
                                       IN HDC hDCsrce, IN long xS, IN long yS, IN long wS, IN long hS,
                                       IN BYTE nAlpha, IN ZOBJECT zObjItem);
ExportC void      ZI_AlphaBlend (IN HDC hDCdest, IN long xDest, IN long yDest, IN long nWidth, IN long nHeight,
                                 IN HDC hDCsrce, IN long xCurrentScroll, IN long yCurrentScroll);
ExportC void      ZI_ReleaseCapture ();
ExportC void      ZI_DeleteCtrlObject (IN HWND hWnd);
ExportC long      ZI_MouseOverObjectID ();
ExportC HBITMAP   ZI_GetBitmapFromDC(IN HDC hDC);
ExportC long      ZI_DeleteControlBitmap (IN HWND hWnd);
ExportC void      ZI_Iconise (IN long xPicSize, IN long yPicSize, IN long xCell, IN long yCell, OUT long &xPos, OUT long &yPos, OUT long &xSize, OUT long &ySize);
ExportC void      ZI_SetZoomValue (IN HWND hWnd, IN float rV);
ExportC float     ZI_GetZoomValue(IN HWND hWnd);
ExportC void      ZI_AlphaBlendEx (IN HDC hDCdest, IN long xDest, IN long yDest, IN long wDest, IN long hDest,
                                   IN HDC hDCsrce, IN long xSrce, IN long ySrce, IN long wSrce, IN long hSrce,
                                   IN BYTE Alpha, IN long AngleDegree, IN long nQuality);
ExportC long      ZI_IsKeyDown (IN long CheckKey);
ExportC long      ZI_IsAnyArrowPressed ();
ExportC long      ZI_IsShiftKeyPressed ();
ExportC long      ZI_IsCtrlKeyPressed ();
ExportC long      ZI_IsLButtonDown ();
ExportC long      ZI_IsRButtonDown ();
ExportC HWND      ZI_CreateWindow (IN HWND hParent, IN long x, IN long y, IN long xW, IN long yH, IN HMENU ControlID);
ExportC LONG_PTR  ZI_CreateImageFromBitmap (IN HBITMAP hBmp);
ExportC long      ZI_IsTrialVersion ();
ExportC void      ZI_DisableCropRectangle (IN HWND hWnd);
ExportC void      ZI_UpdateWindow (IN HWND hWnd, IN long nFlag);
ExportC void      ZI_DisableCropRectangle (IN HWND hWnd);
ExportC void      ZI_SetFromFile (IN HWND hCtrl, IN WCHAR* sUseText);
ExportC long      ZI_GetImageFrameCount (IN LONG_PTR lpImg);
ExportC void      ZI_UpdateWindow (IN HWND hWnd, IN long nFlag);
ExportC void      ZI_DisableCropRectangle (IN HWND hWnd);
ExportC LONG_PTR  ZI_CreateMultiFrameImage (IN LONG_PTR lpImg, IN long nUseBit, IN long nFit);
ExportC void      ZI_GradientPaintDC (IN HDC hDC, IN long x, IN long y, IN long xW, IN long yH, IN long TopRGB, IN long BottomRGB);
ExportC void      ZI_SetProperty (IN HWND hWnd, IN long nItem, IN LONG_PTR nValue);
ExportC LONG_PTR  ZI_GetProperty (IN HWND hWnd, IN long nItem);
ExportC void      ZI_GetBitmapSize (IN HANDLE hBmp, OUT long &xWidth, OUT long &yHeight);
ExportC HBITMAP   ZI_GetBMP (IN HWND hWnd);
ExportC void      ZI_GetImageSizeFromControl (IN HWND hWnd, OUT long &imgW, OUT long &imgH);
ExportC HBITMAP   ZI_GetPaintBitmap (IN HWND hWnd);
ExportC HDC       ZI_GetPaintDC (IN HWND hWnd);
ExportC HDC       ZI_GetDC (IN HWND hWnd);

Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

Charles Pegge

Thanks Patrice,

I think the main PB overheads you have dispensed with are the dynamic string library, garbage collection, and variable-initialisation. Optimised C will also use spare registers instead of local variables where possible.

Not sure about the difference between const and #define. These should not have any effect on the binary.

Patrice Terrier

#7
And you forget the ugly DDT engine, that makes the code larger each time Bob added new core API encapsulations ;)
Patrice Terrier
GDImage (advanced graphic addon)
http://www.zapsolution.com

John Spikowski

Patrice,

I hear Broadway is casting for a Moses part. I could see you standing on top of Mt. C and demanding to let your people go.  ;D