Using Win32 functions in Visual FoxPro Image Gallery
Code examples:
How to release and renew a lease on an IP address previously obtained through Dynamic Host Configuration Protocol (DHCP)
Saving available locale records into a cursor
Winsock: retrieving information from a host database for a given host name
Dial the Net Automatically
GDI+: converting image file to another graphics format
Reading Internet Query options
Retrieving list of Global Atom names
Scanning a hierarchy of child windows down from the Windows Desktop
Using an Event Object. Part B: running an application responding to events
Using MessageBeep
Clipping mouse cursor area
Reading and setting explicit Application User Model ID for the current process (Win7)
Reading current hardware profile
Retrieving graphic capabilities of your display
Retrieving the state of your Internet connection
Using GetSysColor
WAV file recorder
Converting long file names to the short format and vice versa
Pocket PC: retrieving data from the Contacts Database
Retrieving the priority class for the current process
Terminating VFP application using the FatalAppExit
URL: converting unsafe characters and spaces into escape sequences
Using the Semaphore object
Retrieveing general information about the driver and data source associated with an ODBC connection
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: 70  
    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 (107.22.25.119)
    4 sec.Example: 'Enumerating forms supported by a specified printer'
    6.63 min.Function: 'GetThreadDesktop'
    6.68 min.Example: 'Drawing standard Windows icons'
    6.75 min.Function: 'GetFileTime'
    13.18 min.Example: 'How to upload a local file to FTP server using FtpPutFile'
    13.25 min.Function: 'WSAEventSelect'
    Function group: 'Windows Sockets 2 (Winsock)'
    1.93 hrs.Example: 'Using Common Controls: the Header Control'
    1.94 hrs.Example: 'Reading and setting system access privileges for the current process'
    2.28 hrs.Example: 'An alternative way of setting Form.Closable to False'
     Example: 'Adding and deleting User Accounts'
    Google
    Advertise here!