Combining Images with Regions (original) (raw)

  1. Define the following global variables:
    CWnd WndClient; /* current child window */
    RGNXFORM XForm; /* Structure for transforming display coordinates */
    RECT rClientArea; /* Client area of the current window */
    RECT rRgnRect; /* Rectangle that defines the region */
    LBitmapBase BitmapDst; /* Destination bitmap */
    LBitmapBase BitmapSrc; /* Source bitmap */
    L_INT XDst; /* Column offset of the destination */
    L_INT YDst; /* Row offset of the destination */
    L_INT XSize;/* Pixel width of the rectangle to combine */
    L_INT YSize;/* Pixel height of the rectangle to combine */
    L_INT XSrc; /* Column offset of the source */
    L_INT YSrc; /* Column offset of the source */
  2. Load two images as follows:
    BitmapDst.Load(MAKE_IMAGE_PATH(TEXT("sample1.cmp")), 0, ORDER_BGR, NULL, NULL);
    BitmapSrc.Load(MAKE_IMAGE_PATH(TEXT("sample2.cmp")), 0, ORDER_BGR, NULL, NULL);
  3. Get the client area of the current child window as follows:
WndClient.GetClientRect(&rClientArea);  
  1. Set RGNXFORM fields, assuming that the display rectangle is the same as the client area of the current child window as follows:
    XForm.uViewPerspective = TOP_LEFT;
    XForm.nXScalarNum = BitmapDst.GetWidth();
    XForm.nXScalarDen = rClientArea.right;
    XForm.nYScalarNum = BitmapDst.GetHeight();
    XForm.nYScalarDen = rClientArea.bottom;
    XForm.nXOffset = 0;
    XForm.nYOffset = 0;
  2. Specify a rectangle to define the region and then create a rectangular region as follows:
    SetRect(&rRgnRect, rClientArea.right/8, rClientArea.bottom/8, rClientArea.right/2, rClientArea.bottom/2);
    LBitmapRgn bmpRegion(&BitmapDst);
    bmpRegion.SetRgnRect(&rRgnRect);
    bmpRegion.SetRgnXForm(&XForm);
  3. Specify a position in the top left part of the displayed image and use the full size of the source bitmap as follows:
    XDst = BitmapDst.GetWidth() / 8;
    YDst = BitmapDst.GetHeight() / 8;
    YSize = BitmapSrc.GetHeight();
    XSize = BitmapSrc.GetWidth();
    XSrc = 0;
    YSrc = 0;
  4. Combine BitmapDst with BitmapSrc, using flags for an ordinary paste, and save it as a new file:
    BitmapDst.Combine(&BitmapSrc, XDst, YDst, XSize, YSize, XSrc, YSrc, CB_OP_ADD | CB_DST_0);
    BitmapDst.Save(MAKE_IMAGE_PATH(TEXT("eye.gif")), FILE_BMP, 0, 2, 1, 0);
  5. At the end you should free the rectangle:

LEADTOOLS Raster Imaging C++ Class Library Help