FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Mejora en Tbitmap
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Mejora en Tbitmap
Posted: Mon Apr 29, 2013 07:31 AM
Para poder usar los archivos Png desde fichero en la clase tbitmap .

Code (fw): Select all Collapse
METHOD LoadImage( cResName, cBmpFile ) CLASS TBitmap

   local lChanged := .f.
   local hBmpOld  := ::hBitmap
   local hPalOld  := ::hPalette
   local aBmpPal

   DEFAULT cResName := ::cResName, cBmpFile := ::cBmpFile

   if ! Empty( cResName )
       aBmpPal    = PalBmpLoad( cResName )
       ::hBitmap  = aBmpPal[ 1 ]
       ::hPalette = aBmpPal[ 2 ]
       lChanged  := .t.
       cBmpFile  := nil

    elseif File( cBmpFile )
       IF upper(right(cBmpFile,3))="PNG"
          pausa(cBmpfile)
          ::hBitmap  = FWOpenPngFile( cBmpFile )
          ::hPalette = 0
       else
         aBmpPal = PalBmpRead( ::GetDC(), AllTrim( cBmpFile ) )
         ::hBitmap = aBmpPal[ 1 ]
         ::hPalette = aBmpPal[ 2 ]
         ::ReleaseDC()
         lChanged  := .t.
         cResName  := nil
      endif
   endif

   if lChanged

      ::cResName = cResName
      ::cBmpFile = cBmpFile

      if ! Empty( hBmpOld )
         PalBmpFree( hBmpOld, hPalOld )
      endif

      PalBmpNew( ::hWnd, ::hBitmap, ::hPalette )

   endif

  ::HasAlpha()

return lChanged
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Mejora en Tbitmap
Posted: Mon Apr 29, 2013 02:55 PM
porque
Code (fw): Select all Collapse
pausa(cBmpfile)
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Mejora en Tbitmap
Posted: Mon Apr 29, 2013 03:43 PM
carlos vargas wrote:porque
Code (fw): Select all Collapse
pausa(cBmpfile)

Se me olvido limpiarlo del c贸digo , :-)
Simplemente borrarlo .
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Mejora en Tbitmap
Posted: Mon Apr 29, 2013 07:25 PM

Incluido para el pr贸ximo build, gracias! :-)

De todas formas, un peque帽o comentario: desde un punto de vista m谩s riguroso, es precisamente en la Clase TImage que deriva de TBitmap, en donde esta funcionalidad tiene m谩s sentido. Pero si el cambio es aceptado asi, pues bienvenido sea :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Mejora en Tbitmap
Posted: Mon Apr 29, 2013 08:39 PM

Antonio , efectivamente quizas era m谩s correcto realizar los cambios en Timage , pero si lo hacemos en Tbitmap , conseguimos que funciones como msgget() y otras que usen internamente bitmaps se vean beneficiadas por el cambio .
Saludos.

Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Mejora en Tbitmap
Posted: Tue Apr 30, 2013 08:00 AM
Antonio , versi贸n mejorada , ahora funciona tambien desde recursos , usa freeimage ,ser铆a mejor no usarlo pero de momento nos puede servir ...


Code (fw): Select all Collapse
METHOD LoadImage( cResName, cBmpFile ) CLASS TBitmap

   local lChanged := .f.
   local hBmpOld  := ::hBitmap
   local hPalOld  := ::hPalette
   local aBmpPal

   DEFAULT cResName := ::cResName, cBmpFile := ::cBmpFile

     if ! Empty( cResName )
       IF  FindResource( GetResources(), cResName , RT_RCDATA )  != 0
             ::hBitmap:=  FILoadFromMemory( cResToStr( cResName, RT_RCDATA ), RT_RCDATA )
             ::hPalette = 0
             lChanged  := .t.
             cBmpFile  := nil
       ELSE
         aBmpPal    = PalBmpLoad( cResName )
         ::hBitmap  = aBmpPal[ 1 ]
         ::hPalette = aBmpPal[ 2 ]
         lChanged  := .t.
         cBmpFile  := nil
      endif

    elseif File( cBmpFile )
       IF upper(right(cBmpFile,3))="PNG"
          ::hBitmap  = FWOpenPngFile( cBmpFile )
          ::hPalette = 0
       else
         aBmpPal = PalBmpRead( ::GetDC(), AllTrim( cBmpFile ) )
         ::hBitmap = aBmpPal[ 1 ]
         ::hPalette = aBmpPal[ 2 ]
         ::ReleaseDC()
         lChanged  := .t.
         cResName  := nil
      endif
   endif

   if lChanged

      ::cResName = cResName
      ::cBmpFile = cBmpFile

      if ! Empty( hBmpOld )
         PalBmpFree( hBmpOld, hPalOld )
      endif

      PalBmpNew( ::hWnd, ::hBitmap, ::hPalette )

   endif

  ::HasAlpha()

return lChanged
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Mejora en Tbitmap
Posted: Tue May 28, 2013 09:20 PM
Buenas noches
Para usar PNG en un desde recursos hay que usar la lib FreeImage como indica este post, o se puede usar directamente?

Sigo teniendo el problema de al ser cargados desde fichero me desaparecen algunas veces y no siempre el mismo como expuse en el tema:

http://forums.fivetechsupport.com/viewtopic.php?f=6&t=26283&p=144510&hilit=png+rc#p144510

Gracias
Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces
Posts: 1516
Joined: Thu May 27, 2010 02:06 PM
Re: Mejora en Tbitmap
Posted: Wed May 29, 2013 07:21 AM

No puedo aportar nada nuevo , pues decidi no usar Pngs en el programa . Despues de pensar el tema detenidamente , y sopesar pros y contras , la diferencia de "peso" de los png sobre los bmp no compensa el tiempo que pierde el programa en descomprimir los png y trasformarlos en bmps para mostrarlos . Entiendo y comparto que tengamos que tener la posibilidad de usarlos , porque hoy es un estandar , pero de momento creo que me sale mejor trasformar los bmps a 32bits.Usados desde recursos ( con freeimage) en los btnbmps yo no he tenido problemas pero eso no quiere decir que no existan.
La libreria freeimage est谩 ya muy usada y depurada , aunque lo bueno ser铆a no depender de dlls externas .
Saludos.

Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Mejora en Tbitmap
Posted: Wed May 29, 2013 10:01 AM

Gracias por la aclaraci贸n y tus apreciaciones
Totalmente de acuerdo y seguir茅 tus consejos.
Saludos

Cristobal Navarro

Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noci贸n del tiempo

El secreto de la felicidad no est谩 en hacer lo que te gusta, sino en que te guste lo que haces

Continue the discussion