Bug in HasAlpha()

Re: Bug in HasAlpha()

Postby Antonio Linares » Wed Apr 05, 2017 6:11 pm

If we paint it into a memory hDC then we will just check if it works or not

Nothing will be seen
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bug in HasAlpha()

Postby Enrico Maria Giordano » Wed Apr 05, 2017 6:25 pm

So, why not to make a function HasAlpha( hBmp ) using ABPaint() inside it?

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Bug in HasAlpha()

Postby Antonio Linares » Wed Apr 05, 2017 6:53 pm

Enrico,

Lets check if it works.

I have modified FWH function ABPaint() to return the result of the call to AlphaBlend()

Code: Select all  Expand view  RUN
function HasAlpha( hBitmap )

   local hDC := CreateDC( "DISPLAY", "", "" )
   local lHasAlpha := ABPaint( hDC, 0, 0, hBitmap )

   DeleteDC( hDC )
   
return lHasAlpha


I am emailing you the modified FWH library. I appreciate if you can test it
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bug in HasAlpha()

Postby Enrico Maria Giordano » Wed Apr 05, 2017 9:09 pm

I get this:

Code: Select all  Expand view  RUN
Harbour 3.2.0dev (r1605041350)
Copyright (c) 1999-2016, http://harbour-project.org/
Embarcadero C++ 7.20 for Win32 Copyright (c) 1993-2016 Embarcadero Technologies, Inc.
ALPHA.c:
Turbo Incremental Link 6.75 Copyright (c) 1997-2016 Embarcadero Technologies, Inc.
Error: Unresolved external '_pcre_config' referenced from E:\HARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_malloc' referenced from E:\HARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unresolved external '_pcre_stack_free' referenced from E:\HARBOUR\LIB\HBRTL.LIB|hbregex
Error: Unable to perform link


Can you send me the libs for xHarbour, please?

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Re: Bug in HasAlpha()

Postby Antonio Linares » Wed Apr 05, 2017 11:14 pm

Are you linking hbpcre.lib ?
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Bug in HasAlpha()

Postby nageswaragunupudi » Thu Apr 06, 2017 1:31 am

Function HasAlpha() has never been changed and works the same way it was working all the time.

Code: Select all  Expand view  RUN

cFile := "c:\fwh\bitmaps\olga1.jpg"
hBmp := FILOADIMG( cFile ) // Source of function image.prg. Requires Freeimage.dll
? HasAlpha( hBmp ) // --> .F.
 


In the first post in this thread, hBmp is read wth the function GDIP_IMAGEFROMFILE(). This function uses GDI+. This does not require freeimage.dll, but the side-effect is this function converts even jpeg image as an alpha image and returns hBmp which has Alpha. Naturally HasAlpha( hBmp ) returns .T., because this hBitmap has Alpha channel. Even if the alpha channel is added ( 32-bit bitmap instead of 24-bit bitmap) there is no change in the content or rendering when painted with abpaint(). We knew this behavior from the time we started using GDI+.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10651
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Bug in HasAlpha()

Postby Enrico Maria Giordano » Thu Apr 06, 2017 7:53 am

nageswaragunupudi wrote:Function HasAlpha() has never been changed and works the same way it was working all the time.

Code: Select all  Expand view  RUN

cFile := "c:\fwh\bitmaps\olga1.jpg"
hBmp := FILOADIMG( cFile ) // Source of function image.prg. Requires Freeimage.dll
? HasAlpha( hBmp ) // --> .F.
 


In the first post in this thread, hBmp is read wth the function GDIP_IMAGEFROMFILE(). This function uses GDI+. This does not require freeimage.dll, but the side-effect is this function converts even jpeg image as an alpha image and returns hBmp which has Alpha. Naturally HasAlpha( hBmp ) returns .T., because this hBitmap has Alpha channel. Even if the alpha channel is added ( 32-bit bitmap instead of 24-bit bitmap) there is no change in the content or rendering when painted with abpaint(). We knew this behavior from the time we started using GDI+.


Thank you. This could explain why HasAlpha() is not working fine. Unfortunately there is another problem: images loaded with GDIP_IMAGEFROMFILE() seems to not paint correctly using ABPAINT(), at least with TPrinter's hDCOut.

EMG
User avatar
Enrico Maria Giordano
 
Posts: 8718
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia

Previous

Return to Bugs report & fixes / Informe de errores y arreglos

Who is online

Users browsing this forum: No registered users and 18 guests