Using Win32 functions in Visual FoxPro Image Gallery
Device Context
..msdn
ChangeDisplaySettings
CreateCompatibleDC
CreateDC
DeleteDC
DeleteObject
EnumDisplayDevices
EnumDisplaySettings
GetDC
GetDeviceCaps
GetObject
GetObjectType
ReleaseDC
SelectObject
Code examples:
Converting twips to pixels and vice versa
Creating a window using CreateWindowEx function
Drawing standard Windows icons
Form Magnifier
GDI+ fun: roach-infested desktop
GDI+: Color Transparency
GDI+: Creating thumbnails to preview images in a directory
GDI+: Scrolling through large image using the mouse
How to make a VFP form fading out when released (GDI version)
How to view icons stored in executable files (Icon Viewer)
How to view icons stored in executable files (Icon Viewer) - II
Placing an arbitrary rectangular area of main VFP window on the Clipboard
Placing On-screen Alert on top of all windows
Printing text on the client area of the main VFP window
Retrieving graphic capabilities of your display
Using GetNearestColor
GDI+: Color Transparency

User rating: 0/10 (0 votes)
Rate this code sample:
  • ~
More code examples    Listed functions    Add comment     W32 Constants      Translate this page Printer friendly version of this code sample
Before you begin:
Download the original image file before testing this code sample. Otherwise use any image file, preferably with dimensions not exceeding 300 pixels.



The code is based on custom GDI+ class. Download the class module first and save it in gdiplus.prg file.

* * *
The source image on the left is displayed in VFP Image control. The image on the right is loaded from the same graphics file and drawn on the the form via GDI+ calls with a single color made transparent.

The cursor position over the source image (Image1.MouseMove) specifies min ARGB value in the color transparent range. To assign the maximum value left click within the source image.




See also:
  • Displaying the color palette stored in an image file
  • Irregularly shaping FoxPro form via transparency color key
  • Semi-transparent Form
  • Displaying bitmap using the AlphaBlend function
  •  
    LOCAL oForm As Tform
    oForm=CREATEOBJECT("Tform")
    oForm.Show(1)
    * end of main
     
    DEFINE CLASS Tform As Form
        Width=560
        Height=305
        Autocenter=.T.
        BackColor=RGB(245,245,128)
        Caption="GDI+ Color Transparency. "+;
            "Left click to set the ARGB max value"
     
        gdip=NULL
        hWindow=0
        hDC=0
        canvas=NULL
        oImage=NULL
     
        * transparent color range
        colorlow=-1
        colorhigh=-1
     
        colorback=RGB(50,180,50) && backs the image copy
     
        ADD OBJECT sbar As Tbar
        ADD OBJECT Image1 As Image WITH;
        Left=4, Top=4, Width=274, Height=274, Stretch=2
     
    PROCEDURE Init
        SET PROCEDURE TO gdiplus ADDITIVE
        WITH THIS
            .declare
            .gdip = CREATEOBJECT("gdiplusinit")
            .hWindow=.HWnd
            .hDC=GetDC(THIS.hWindow)
            .canvas = CREATEOBJECT("graphics", .hDC)
            .Image1.Picture="applecorp_plt01.bmp"
        ENDWITH
     
    PROCEDURE Destroy
        THIS.oImage=NULL
        THIS.canvas=NULL
        THIS.gdip=NULL
        = ReleaseDC(THIS.hWindow, THIS.hDC)
     
    PROCEDURE Paint
        THIS.DrawCopy
     
    PROCEDURE Moved
        THIS.DrawCopy
     
    PROCEDURE colorlow_ASSIGN(vValue)
        THIS.colorlow=vValue
        ThisForm.sbar.Panels(1).Text=;
            "ARGB min: " + TRANSFORM(THIS.colorlow,"@0")
        IF THIS.colorhigh=-1
            THIS.colorhigh=THIS.colorlow
        ENDIF
     
    PROCEDURE colorhigh_ASSIGN(vValue)
        THIS.colorhigh = vValue
        ThisForm.sbar.Panels(2).Text=;
            "ARGB max: " + TRANSFORM(THIS.colorhigh,"@0")
     
    PROCEDURE Image1.Picture_ASSIGN(cImageFile)
        ThisForm.oImage=NULL
        ThisForm.oImage = CREATEOBJECT("gdiimage", cImageFile)
        STORE cImageFile TO THIS.Picture,;
            ThisForm.sbar.Panels(3).Text
     
    PROCEDURE Image1.MouseDown
    LPARAMETERS nButton, nShift, nXCoord, nYCoord
        WITH ThisForm
            LOCAL nColor
            nColor=0
            = GdipBitmapGetPixel(.oImage.hImage,;
                nXCoord-THIS.Left, nYCoord-THIS.Top, @nColor)
     
            ThisForm.colorhigh=nColor
            .DrawCopy
        ENDWITH
     
    PROCEDURE Image1.MouseMove
    LPARAMETERS nButton, nShift, nXCoord, nYCoord
        WITH ThisForm
            LOCAL nColor
            nColor=0
            = GdipBitmapGetPixel(.oImage.hImage,;
                nXCoord-THIS.Left, nYCoord-THIS.Top, @nColor)
     
            ThisForm.colorlow=nColor
            .DrawCopy
        ENDWITH
     
    PROCEDURE DrawCopy
        IF VARTYPE(THIS.Image1) <> "O";
            OR THIS.oImage.hImage=0
            RETURN
        ENDIF
     
        LOCAL hImgAttr, oBrush, nLeft, nTop,;
            nWidth, nHeight, tmpbitmap
     
        WITH THIS.Image1
            nLeft=.Left+.Width+4
            nTop=.Top
            nWidth=.Width
            nHeight=.Height
        ENDWITH
     
        hImgAttr=0
        = GdipCreateImageAttributes(@hImgAttr)
     
        = GdipSetImageAttributesColorKeys(hImgAttr, 0, 1,;
            THIS.colorlow, THIS.colorhigh)
     
        oBrush = CREATEOBJECT("gdisolidbrush",;
            ColorToARGB(THIS.colorback, 255))
     
        * using interim canvas decreases flickers
        tmpbitmap = CREATEOBJECT("gdibitmap", nWidth,nHeight)
     
        tmpbitmap.graphics.FillRectangle(oBrush,;
            0,0,nWidth,nHeight)
     
        WITH THIS.oImage
            = GdipDrawImageRectRectI(tmpbitmap.graphics.graphics,;
                .himage, 0, 0, .imgwidth,.imgheight,;
                0, 0, .imgwidth, .imgheight,;
                2, hImgAttr, 0, 0)
        ENDWITH
     
        THIS.canvas.DrawImage(tmpbitmap, nLeft, nTop)
        = GdipDisposeImageAttributes(hImgAttr)
     
    PROCEDURE declare
        DECLARE INTEGER GetDC IN user32 INTEGER hWindow
     
        DECLARE INTEGER ReleaseDC IN user32;
            INTEGER hWindow, INTEGER dc
     
        DECLARE INTEGER GdipCreateImageAttributes IN gdiplus;
            INTEGER @imageattr
     
        DECLARE INTEGER GdipDisposeImageAttributes IN gdiplus;
            INTEGER imageattr
     
        DECLARE INTEGER GdipSetImageAttributesColorKeys IN gdiplus;
            INTEGER imageattr, INTEGER ColorAdjustType,;
            INTEGER enableFlag, LONG colorLow, LONG colorHigh
     
        DECLARE INTEGER GdipDrawImageRectRectI IN gdiplus;
            INTEGER graphics, INTEGER gdiimage,;
            INTEGER dstx, INTEGER dsty,;
            INTEGER dstwidth, INTEGER dstheight,;
            INTEGER srcx, INTEGER srcy,;
            INTEGER srcwidth, INTEGER srcheight,;
            INTEGER srcUnit, INTEGER imageAttributes,;
            INTEGER callback, INTEGER callbackData
     
        DECLARE INTEGER GdipBitmapGetPixel IN gdiplus;
            INTEGER gdibitmap, INTEGER x,;
            INTEGER y, LONG @argbcolor
     
    ENDDEFINE
     
    DEFINE CLASS Tbar As OleControl
        OleClass="MSComctlLib.SBarCtrl.2"
    PROCEDURE Init
        THIS.Height=21
        THIS.Panels(1).Width = 160
        THIS.Panels.Add
        THIS.Panels(2).Width = 160
        THIS.Panels.Add
        THIS.Panels(3).Width = 2000
    ENDDEFINE
     

    User rating: 0/10 (0 votes)
    Rate this code sample:
    • ~
    4188 bytes  
    Created: 2009-01-17 10:26:27  
    Modified: 2009-01-19 12:40:30  
    Visits in 7 days: 77  
    Listed functions:
    GdipBitmapGetPixel
    GdipCreateImageAttributes
    GdipDisposeImageAttributes
    GdipDrawImageRectRectI
    GdipSetImageAttributesColorKeys
    GetDC
    ReleaseDC
    Printer friendly API declarations
    Word Index links for this example:
    Translate this page:
      Spanish    Portuguese    German    French    Italian  
    FreeTranslation.com offers instant, free translations of text or web pages.
    User Contributed Notes:
    There are no notes on this subject.


    Copyright © 2001-2013 News2News, Inc. Before reproducing or distributing any data from this site please ask for an approval from its owner. Unless otherwise specified, this page is for your personal and non-commercial use. The information on this page is presented AS IS, meaning that you may use it at your own risk. Microsoft Visual FoxPro and Windows are trade marks of Microsoft Corp. All other trademarks are the property of their respective owners. 

    Privacy policy
    Credits: PHP (4.4.9), an HTML-embedded scripting language, MySQL (5.1.55-log), the Open Source standard SQL database, AceHTML Freeware Version 4, freeware HTML Editor of choice.   Hosted by Korax Online Inc.
    Last Topics Visited (23.22.212.158)
    4.43 hrs.Example: 'Minimizing all running applications'
    4.68 hrs.Example: 'Establishing connection using the SQLDriverConnect'
    5.04 hrs.Example: 'Creating a mailslot'
     Example: 'Using InternetGoOnline function'
    9.78 hrs.Function: 'PeekMessage'
     Example: 'How to Start a Process as Another User (NT/XP/2K)'
    13.24 hrs.Example: 'Obtaining names and positions for shortcuts located on the Windows Desktop'
    14.29 hrs.Example: 'Using Font and Text functions'
     Function: 'PathBuildRoot'
    Function group: 'Shell Lightweight Utility APIs -- Path Functions'
    15.38 hrs.Function: 'DeleteFileTransacted'
    Google
    Advertise here!