funcion wrapper desde libpng para convertir imagenes PNG a Imagenes BMP
ahora podemos leer los PNG y tratarlos como Bitmaps, lamentablemente los niveles transparencias ( canal alpha ) no estas soportadas
(esto es solo para pruebas)
Harbour:
Link: hbzlib.lib
LIB: http://www.sitasoft.net/fivewin/lib/harbour/fwpngh.lib
ejemplo: http://www.sitasoft.net/fivewin/samples/tpngh.rar
xHarbour:
Link: zlib.lib
LIB: http://www.sitasoft.net/fivewin/lib/xharbour/fwpngx.lib
ejemplo: http://www.sitasoft.net/fivewin/samples/tpngx.rar
codigo del ejemplo
Code: Select all
#include "FiveWin.ch"
STATIC oWnd, oBmp
FUNCTION Main()
local oBar
local cFile := ""
local lSetAlpha := .t.
DEFINE WINDOW oWnd FROM 0,0 TO 20,50 TITLE "Test READING PNG IMAGE"
define buttonbar oBar of oWnd size 48,48
define button prompt "File" of oBar action( LoadPng( oBmp ) ) CENTER
define button prompt "transp ON" of oBar action( oBmp:lTransparent := .T., oBmp:refresh() ) CENTER
define button prompt "transp OFF" of oBar action( oBmp:lTransparent := .F., oBmp:refresh() ) CENTER
define button prompt "Adjust ON" of oBar action( oBmp:lStretch := .T., oBmp:refresh() ) CENTER
define button prompt "Adjust OFF" of oBar action( oBmp:lStretch := .F., oBmp:refresh() ) CENTER
@ 0,0 BITMAP oBmp FILENAME cFile OF oWnd ;
PIXEL SCROLL
WndCenter(oWnd:hWnd)
ACTIVATE WINDOW oWnd ;
ON PAINT ( oBmp:aDjClient(), oBmp:ScrollAdjust() ) ;
ON RESIZE ( oBmp:aDjClient(), oBmp:ScrollAdjust() )
RETURN ( nil )
function LoadPng( oBmp )
local cFile := cGetFile( "*.png","Select File" )
local hPng
if !Empty( cFile )
hPng = FWOpenPngFile( cFile )
if IsGdiObject( hPng )
if IsGdiObject( oBmp:hBitmap )
DeleteObject( oBmp:hBitmap )
endif
oBmp:hBitmap = hPng
oBmp:Refresh()
endif
endif
return nil