FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour ¿Evitar sustitución de color en BTNBMP? *SOLUCIONADO*
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
¿Evitar sustitución de color en BTNBMP? *SOLUCIONADO*
Posted: Fri Jul 18, 2014 10:48 AM
Buenas amigos, tengo necesidad de usar imágenes en botones y pretendo usar BTNBMP.
Con este simple ejemplo :

Code (fw): Select all Collapse
#include "fivewin.ch"

Function Main()
Local oDlg, oBtn

   DEFINE DIALOG oDlg 

   @ 3, 5 BTNBMP oBtn SIZE 80, 48 FILE "bdbar.BMP" ACTION MsgInfo ('Hola') 

   ACTIVATE DIALOG oDlg CENTERED 

return nil


... se me sustituye todo el color azul del botón por el color de fondo del botón o diálogo. ¿Cómo se puede evitar esto?
La imagen sólo tiene dos colores, azul y blanco.

El botón


El resultado
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Fri Jul 18, 2014 01:10 PM

En realidad, esta BITMAP está dañado.

Intercambiado por otro BMP, ejemplo: EMAIL.BMP y funcionó correctamente.

Saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Fri Jul 18, 2014 01:25 PM

No entiendo lo de que está dañado .... incluso lo he editado con el PAINT. ¿Tiene que tener algún formato especial?

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Fri Jul 18, 2014 01:29 PM
Si pinto el pixel 0,0 de otro color distinto al azul funciona correctamente.
He estado observando el método que pinta el botón y al parecer toma el color de fondo de la posición 0,0

Code (fw): Select all Collapse
nZeroZeroClr = GetPixel( ::hDC, 0, 0 )
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Fri Jul 18, 2014 01:42 PM

Modifiqué las propriedads del mismo con el IRFANVIEW.EXE y no funciona mismo asi, está todo con mal formato.

También no comprendo que pasa.

http://www.irfanview.com/

saludos.

João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Sat Jul 19, 2014 03:35 AM

El color del pixel en 0, 0 se usa para saber cual es el color transparente.

Con que le cambies el color a ese pixel (como has hecho) es suficiente para que se vea bien.

regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Sat Jul 19, 2014 06:53 PM

Me parece muy curioso ... ¿no hay forma de solucionar esto sin tener que modificar las imágenes?

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Sun Jul 20, 2014 02:00 AM
Angel,

Está técnica la aprendí de Borland, quien tambien lo hacía igual. Para no modificar las imágenes, entonces tendrás que modificar la función de pintado.

O prueba a hacer esto: Añade esté código al final del primer PRG de tu aplicación:

Code (fw): Select all Collapse
#pragma BEGINDUMP

#include <windows.h>
#include <hbapi.h>

HB_FUNC( GETPIXEL )
{
   hb_retnl( RGB( 255, 0, 0 ) ); // forzamos a que devuelva Rojo (Red, Green and Blue)
}

#pragma ENDDUMP
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: ¿Evitar sustitución de color en BTNBMP?
Posted: Sun Jul 20, 2014 08:21 AM
Hace algún tiempo me encontré con el mismo problema con algunos BMPs y PNGs que tenían un aspecto parecido al tuyo
Como no soy ningún experto en imágenes, y después de dedicar mucho tiempo a cambiar imágenes e intentar ver qué pasaba, pensé que el problema eran los BMPs que yo tenía.
Probé cambiando el nivel Alpha, la transparencia, etc, sin conseguir ningún resultado
Insisto en que no soy ningún experto en el uso de imágenes, es más, me considero bastante torpe en este aspecto
Encontré una solución que a mí me funcionó aunque tuve que cambiar la clase
Hice lo siguiente (por si te parece bien)
1.- Creé una DATA nueva en la clase BTNBMP
Code (fw): Select all Collapse
DATA   nZeroZeroClr INIT Nil


2.- En el método Paint , en todas las llamadas a la function DrawTransBmp, añadí esa DATA como parámetro final (creo que son 4 llamadas a esa funcion)
Por ejemplo
Code (fw): Select all Collapse
.../...
            else
               DrawTransBmp( ::hDC, hBmp, oBmpRect:nTop, oBmpRect:nLeft + 2, oBmpRect:nWidth, oBmpRect:nHeight, ::nZeroZeroClr )
            endif

.../...


3.- Modifiqué esa function DrawTransBmp para que aceptara ese parámetro
Code (fw): Select all Collapse
static function DrawTransBmp( hDC, hBmp, nRow, nCol, nWidth, nHeight, nZeroZeroClr )

   local hDCMem, hBmpOld, nOldClr //, nZeroZeroClr

   DEFAULT nWidth := nBmpWidth( hBmp ), nHeight := nBmpWidth( hBmp ), nZeroZeroClr := Nil 

   hDCMem = CreateCompatibleDC( hDC )

   // we can not get nZeroZeroClr from hDC is possible hDC are locked by other SelectObject
   // An application cannot select a bitmap into more than one device context at a time.
   hBmpOld      = SelectObject( hDCMem, hBmp )
   
   if nZeroZeroClr = Nil
      nZeroZeroClr = GetPixel( hDCMem, 0, 0 )
   endif

.../...


4.- En la definicion de mis botones, si tengo algun problema hacía lo siguiente
Code (fw): Select all Collapse
   @ 3, 5 BTNBMP oBtn SIZE 132, 52 FILE "bdbar.bmp" NOBORDER ACTION oDlg:End() //MsgInfo ('Hola') 
   oBtn:nZeroZeroClr  := -1

Et voilá

Pero, si me preguntas por qué ocurre con algunos BMPs? (No tengo ni idea, lo dejé por imposible)
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: 728
Joined: Fri Oct 07, 2005 07:38 AM
Re: ¿Evitar sustitución de color en BTNBMP? *SOLUCIONADO *
Posted: Mon Jul 21, 2014 07:04 AM

Gracias amigos, con el ajuste que sugiere Antonio se acabó el problema.
Saludos,

Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: ¿Evitar sustitución de color en BTNBMP? *SOLUCIONADO*
Posted: Mon Jul 21, 2014 12:50 PM

Angel,

Me alegro de que te haya servido.

De todas formas recuerda que si en tu aplicación se usase la función GetPixel() no funcionaría correctamente :-)

regards, saludos

Antonio Linares
www.fivetechsoft.com

Continue the discussion