Mejora en Tbitmap

Mejora en Tbitmap

Postby mastintin » Mon Apr 29, 2013 7:31 am

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

 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Mejora en Tbitmap

Postby carlos vargas » Mon Apr 29, 2013 2:55 pm

porque
Code: Select all  Expand view

pausa(cBmpfile)
 
Salu2
Carlos Vargas
Desde Managua, Nicaragua (CA)
User avatar
carlos vargas
 
Posts: 1720
Joined: Tue Oct 11, 2005 5:01 pm
Location: Nicaragua

Re: Mejora en Tbitmap

Postby mastintin » Mon Apr 29, 2013 3:43 pm

carlos vargas wrote:porque
Code: Select all  Expand view

pausa(cBmpfile)
 

Se me olvido limpiarlo del código , :-(
Simplemente borrarlo .
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Mejora en Tbitmap

Postby Antonio Linares » Mon Apr 29, 2013 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 42098
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Mejora en Tbitmap

Postby mastintin » Mon Apr 29, 2013 8: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.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Mejora en Tbitmap

Postby mastintin » Tue Apr 30, 2013 8: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: 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


 
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Mejora en Tbitmap

Postby cnavarro » Tue May 28, 2013 9: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
User avatar
cnavarro
 
Posts: 6542
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Mejora en Tbitmap

Postby mastintin » Wed May 29, 2013 7: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.
User avatar
mastintin
 
Posts: 1516
Joined: Thu May 27, 2010 2:06 pm

Re: Mejora en Tbitmap

Postby cnavarro » 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
User avatar
cnavarro
 
Posts: 6542
Joined: Wed Feb 15, 2012 8:25 pm
Location: España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 59 guests