Using Win32 functions in Visual FoxPro Image Gallery
GDI+ Bitmap
..msdn
GdipBitmapGetPixel
GdipBitmapSetPixel
GdipBitmapSetResolution
GdipCloneBitmapArea
GdipCreateBitmapFromGdiDib
GdipCreateBitmapFromGraphics
GdipCreateBitmapFromHBITMAP
GdipCreateBitmapFromHICON
GdipCreateHBITMAPFromBitmap
GdipCreateHICONFromBitmap
Code examples:
GDI+: Color Transparency
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: 129  
    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-2018 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.6.39), the Open Source standard SQL database, AceHTML Freeware Version 4, freeware HTML Editor of choice.   Hosted by Korax Online Inc.
    Last Topics Visited (54.226.33.117)
    19 sec.Function: 'WinHttpSendRequest'
    39 sec.
    Function group: 'MSHTML Reference'
    58 sec.Function: 'MQCloseQueue'
    1.28 min.Example: 'Using custom Simple MapiSendMail class'
    1.63 min.Articles
    1.97 min.Function: 'GdipCreateMatrix'
    2.28 min.
    Function group: 'Window'
    2.63 min.
    3.02 min.Function: 'CeRegEnumValue'
    Function group: 'Remote Application Programming (RAPI)'
    3.35 min.Example: 'Adding supplementary data to AVI files'
    Google
    Advertise here!