The MASM Forum

General => The Campus => Topic started by: ragdog on March 21, 2018, 08:20:46 PM

Title: Gdi Shadow Rect
Post by: ragdog on March 21, 2018, 08:20:46 PM
Hello

Is it Possible to create with gdi/gdi++ a Transparent shadow rect like this?

(https://i.imgur.com/4R5Y2xk.png)

I search on many sites but i cannot found any solution.

Have any an idea or code snipp?

Greets,

Title: Re: Gdi Shadow Rect
Post by: daydreamer on March 22, 2018, 05:59:32 AM
https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/brushes-and-filled-shapes-in-gdi (https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/brushes-and-filled-shapes-in-gdi)
maybe you could define a path gradient brush for a rectangle and paint a little smaller white rectangle ontop of it
Title: Re: Gdi Shadow Rect
Post by: ragdog on March 22, 2018, 07:30:21 PM
Thanks for your reply

I have try it allready with gradient brush for a rectangle (GradientFill) but without goot results.

ok is stupid  :biggrin:
(https://i.imgur.com/uhMu3UX.png)

I must give a another solution but i cannot find any after many hours google.
Title: Re: Gdi Shadow Rect
Post by: LiaoMi on March 23, 2018, 12:05:09 AM
Algorithm for fast Drop shadow in GDI+
https://stackoverflow.com/questions/7364026/algorithm-for-fast-drop-shadow-in-gdi (https://stackoverflow.com/questions/7364026/algorithm-for-fast-drop-shadow-in-gdi)

IIR Gaussian Blur Filter Implementation using IntelĀ® Advanced Vector Extensions
PDF https://software.intel.com/sites/default/files/Gaussian_Filter.pdf
Download source: gaussian_blur.cpp [36KB] https://software.intel.com/sites/default/files/m/4/3/7/a/a/gaussian_blur_0311.cpp (https://software.intel.com/sites/default/files/m/4/3/7/a/a/gaussian_blur_0311.cpp)
https://software.intel.com/en-us/articles/iir-gaussian-blur-filter-implementation-using-intel-advanced-vector-extensions (https://software.intel.com/en-us/articles/iir-gaussian-blur-filter-implementation-using-intel-advanced-vector-extensions)
Title: Re: Gdi Shadow Rect
Post by: ragdog on March 23, 2018, 04:40:44 AM
Hello

Thanks for the links i found from Qword an example
http://masm32.com/board/index.php?topic=2513.msg26347#msg26347

With a Ellipse if i change it to a rectangle have i not good result, i think the problem is the GradientCenterColor.
Now after many hours google can i not found any soultion in c/cpp or anything ,I do not understand  Delphi/#Net .

And think is not possible, unless i use a png image.

Regards,
Title: Re: Gdi Shadow Rect
Post by: mabdelouahab on March 23, 2018, 09:53:37 AM
Using some trick, I got a little similarity  :biggrin:


(http://gdurl.com/Ptj6)
Title: Re: Gdi Shadow Rect
Post by: jj2007 on March 23, 2018, 03:45:47 PM
Quote from: mabdelouahab on March 23, 2018, 09:53:37 AM
Using some trick

"some tricks" seems to be an underestatement - great code :t

Invoke GdipCreatePen1,COLOR_, STCK_, 0, Addr pen ;FP4(1.0)
invoke GdipCreatePath,FillModeAlternate,ADDR path
invoke GdipAddPathLineI,path,x1,Y,x2,Y
invoke GdipAddPathLineI,path,XW,y1,XW,y2 invoke GdipAddPathLineI,path,x2,YH,x1,YH
invoke GdipAddPathLineI,path,x2,YH,x1,YH
invoke GdipAddPathLineI,path,X,y2,X,y1 add rv(AddS,y1,ROUND_),1
invoke GdipAddPathArcI,path,X,Y,RR,RR,FP4(180.0),FP4(90.0)
invoke GdipAddPathArcI,path,x2,Y,RR,RR,FP4(270.0),FP4(90.0)
invoke GdipAddPathArcI,path,x2,y2,RR,RR,FP4(0.0),FP4(90.0)
invoke GdipAddPathArcI,path,X,y2,RR,RR,FP4(90.0),FP4(90.0)
invoke GdipCreateSolidFill,COLOR_,ADDR brush;ARGB_(130,255,0 , 255)
invoke GdipFillPath,graphics,brush,path/invoke GdipDeleteBrush,brush
invoke GdipDeleteBrush,brush
invoke GdipDrawPath,graphics,pen,path .endif/invoke GdipDeletePen,pen
DrawRectWithShadow invoke GdipDeletePen,pen/invoke GdipDeletePath,path
invoke GdipDeletePath,path
MainDraw invoke GdipCreateBitmapFromScan0,rect.right,rect.bottom,0,PixelFormat32bppPARGB,0,ADDR bitmap
invoke GdipGetImageGraphicsContext,bitmap,ADDR graphics
invoke GdipCreateHBITMAPFromBitmap,bitmap,ADDR Hbitmap,0
WinMain invoke GdipDisposeImage,bitmap
invoke GdiplusStartup,ADDR gtkn,ADDR gsi,0
Title: Re: Gdi Shadow Rect
Post by: ragdog on March 25, 2018, 07:16:01 PM
Hello Mabdelouahab

Thank you for your time and example.
i studi your code  :t

I have change Qwords code from Ellipse to a rectangle and have simlilar looksame your example

but the lines in the corners do not looks good


Title: Re: Gdi Shadow Rect
Post by: Siekmanski on March 25, 2018, 09:26:47 PM
Looks like "vignettes".

I think it can be done with Polar Coordinates....
Maybe there are code examples on the net.
Title: Re: Gdi Shadow Rect
Post by: ragdog on March 25, 2018, 09:37:44 PM

SOrry delete please