Using Win32 functions in Visual FoxPro Image Gallery
Code examples:
Displaying all TCP connections for the local system
Enumerating data formats currently available on the clipboard
Locking and unlocking file of a VFP table
Browsing Windows Known Folders (Special Folders)
Enumerating network resources
How to hot-track menu item selection in top-level form (requires VFP9)
Retrieving the name of the default printer for the current user on the local computer (Win NT/XP)
Shortcut Menu Class
Using FrameRgn for displaying system colors
Winsock: resolving an address to a host name
A class that encrypts and decrypts files using Cryptography API Functions
How to block the ALT+TAB shortcut (WinXP)
How to retrieve version information for the specified file
How to view icons stored in executable files (Icon Viewer) - II
Programmatically removing submenus from VFP main menu
Retrieving IP statistics for the computer
Simple MAPI: how to pick an email recipient from Outlook Express address book
Using NetWkstaTransportEnum to obtain MAC Address of remote server
Winsock: how to retrieve the protocol information corresponding to a protocol name
How to obtain Content-Type value for a file type from the System Registry
How to retrieve adapter information for the local computer (including MAC address)
Reading data from INI files
Switching between keyboard layouts
Using Path functions from Shell Lightweight Utility APIs (shlapi.dll)
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: 74  
    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.21.156.140)
    4 sec.Example: 'How to display advanced Task Dialog (Vista)'
    1.02 hrs.Example: 'How to print picture stored in enhanced-format metafile (*.emf)'
     Function: 'CryptEnumProviderTypes'
    1.69 hrs.Example: 'Enumerating servers of the specified type (e.g. SQL Server) in the primary domain'
     Example: 'Extracting the name and extension parts of a path string'
     Example: 'GDI+: saving image of FoxPro form to graphics file (BMP, GIF, JPG, PNG, TIF)'
    4.27 hrs.Example: 'Using the GetLogicalDriveStrings'
     
    Function group: 'Memory Management'
    4.49 hrs.Example: 'How to get Special Folders paths'
    5.61 hrs.
    Function group: 'Terminal Services'
    Google
    Advertise here!