Page 1 of 1

Mejora en Tbitmap

PostPosted: Mon Apr 29, 2013 7:31 am
by mastintin
Para poder usar los archivos Png desde fichero en la clase tbitmap .

Code: Select all  Expand view


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

 

Re: Mejora en Tbitmap

PostPosted: Mon Apr 29, 2013 2:55 pm
by carlos vargas
porque
Code: Select all  Expand view

pausa(cBmpfile)
 

Re: Mejora en Tbitmap

PostPosted: Mon Apr 29, 2013 3:43 pm
by mastintin
carlos vargas wrote:porque
Code: Select all  Expand view

pausa(cBmpfile)
 

Se me olvido limpiarlo del código , :-(
Simplemente borrarlo .

Re: Mejora en Tbitmap

PostPosted: Mon Apr 29, 2013 7:25 pm
by Antonio Linares
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 :-)

Re: Mejora en Tbitmap

PostPosted: Mon Apr 29, 2013 8:39 pm
by mastintin
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.

Re: Mejora en Tbitmap

PostPosted: Tue Apr 30, 2013 8:00 am
by mastintin
Antonio , versión mejorada , ahora funciona tambien desde recursos , usa freeimage ,sería mejor no usarlo pero de momento nos puede servir ...


Code: Select all  Expand view


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


 

Re: Mejora en Tbitmap

PostPosted: Tue May 28, 2013 9:20 pm
by cnavarro
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

Re: Mejora en Tbitmap

PostPosted: Wed May 29, 2013 7:21 am
by mastintin
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.

Re: Mejora en Tbitmap

PostPosted: Wed May 29, 2013 10:01 am
by cnavarro
Gracias por la aclaración y tus apreciaciones
Totalmente de acuerdo y seguiré tus consejos.
Saludos