Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Problema con el transparente (https://www.clubdelphi.com/foros/showthread.php?t=23731)

supermilloriver 27-07-2005 00:23:03

Problema con el transparente
 
buenassssssssss!

aver, tengo una imagen .bmp en el clipboard, y la cargo en un timage usando Picture.Bitmap:LoadFromClipboardFormat...
cuando seteo la propiedad transparent del TImage en true, no se pone transparente, sigue con el fondo blanco (fue una imagen hecha con el paint)
ahora.... si yo la cargo desde tiempo de diseño desde un archivo, NO desde el clipboard, y hago lo mismo, la imagen se pone transparente como debe ser...
no se que puede ser, pero desde mi ignorancia creo que es porque el ultimo parametro LoadFromClipboardFormat es el HPalette, y yo alli le envio un 0;
supongo entonces, que tendria que enviarle un numero que identifique la palenta que usa el paintbrush o la del sistema, puede ser?
siendo asi... como obtengo ese bendito numerito?

abrazos

Gabriel

dec 27-07-2005 02:58:42

Hola,

Esto parece funcionar bien:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
 begin
   Image1.Transparent := true;
   // Véase la ayuda de Delphi sobre "TransparentMode"
   Image1.Picture.Bitmap.TransparentMode := tmAuto;
   try
     Image1.Picture.Bitmap.Assign(Clipboard);
   except
     on E: EInvalidGraphic do
     begin
       ShowMessage(E.Message);
       raise;
     end;
   end;
 end;

German 27-07-2005 07:51:30

Prueba a asignarle tú mismo el color que debe adoptar como transparente, tras asignar la imagen del clipboard.

Puedes capturar el color de una coordenada de la misma imagen ( 0,0 en el ejemplo):

Código Delphi [-]
Image1.Picture.Bitmap.TransparentColor := Image1.Picture.Bitmap.Canvas.Pixels[0,0];
Image1.Transparent := True;

O bien, asignarle directamente un color transparente:

Código Delphi [-]
Image1.Picture.Bitmap.TransparentColor := clRed;
Image1.Transparent := True;

O

Código Delphi [-]
Image1.Picture.Bitmap.TransparentColor := $00FF8484;
Image1.Transparent := True;


Salu2.

supermilloriver 28-07-2005 00:52:41

obtener paleta del sistema
 
bien!
gracias!
ahora, respecto a mi primer consulta...
como puedo hacer para obtener la paleta del sistema o la paleta que usa el paintbrush y asi enviarla como referencia el ejecutar el metodo
LoadFromClipboardFormat(...,...,aqui debo mandar la paleta)
?


gracias
gabriel

German 28-07-2005 05:25:02

No entiendo tu duda... y no se la razón exacta de empeñarte en utilizar ese método, cuando dec ya te puso un método correcto:

Image1.Picture.Bitmap.Assign(Clipboard);

Aun así, si quieres utilizar el método que indicas:

Image1.Picture.Bitmap.LoadFromClipBoardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);

Salu2.

supermilloriver 29-07-2005 00:27:31

Cita:

Empezado por German
No entiendo tu duda... y no se la razón exacta de empeñarte en utilizar ese método, cuando dec ya te puso un método correcto:

Image1.Picture.Bitmap.Assign(Clipboard);

Aun así, si quieres utilizar el método que indicas:

Image1.Picture.Bitmap.LoadFromClipBoardFormat(cf_BitMap,ClipBoard.GetAsHandle(cf_Bitmap),0);

Salu2.

Aver,
Primero, me gustaria saberlo porque me serviria para otros problemas, en cambio la rta q recibi esta buena pero me sirve para el mas urgente

Segundo, viste ese 0 que envias como tercer parametro en LoadFromClipboardFormat (yo estoiy usando ese metodo tambien), bueno, en l help dice q referencia a la paleta (de colores) y que va 0 si no tiene paleta (eso es lo q entendi yo)... ahora bien, supongo q el paint y/o windows debe usar una paleta de colores no?, o sea debe haber una paleta del sistema, yo quiero saber si hay alguna manera de referenciar esa paleta y enviarla como parametro en lugar del cero

saludos
gabriel

dec 30-07-2005 11:19:02

Hola,

La verdad sea dicha, no estoy muy puesto en el tema, pero, por lo que he podido leer en la ayuda de Delphi y en la del SDK Win32, cuentas con funciones y estructuras para crear paletas de colores y por tanto enviarlas como parámetro cuando se menester.

Sin embargo, intuyo que es raro su uso y no solo por lo que se lee en la ayuda de la propiedad "Palette" del objeto "TBitmap":

Cita:

Empezado por TBitMap Palette property help
Another (although rare) use of Palette is to assign custom palettes created with CreatePalette to this property. Palette contains up to 256 colors that can be used to display the bitmap on screen.

Comienza por la ayuda de la función "CreatePalette" del SDK Win32. A partir de ahí se te ofrece información suficiente (en teoría) para crear ese tipo de objetos.

Sin en la ayuda de Delphi buscas la cadena "Palette property TBitmap" (sin las comillas) te toparás con la descripción de esa propiedad y con un ejemplo que hace uso de la función "CreatePalette", entre otras cosas.

Sin embargo, cuando en el ejemplo que da la ayuda de Delphi para el método "LoadFromClipboardFormat" de "TBitmap" se pasa un cero al parámetro "APalette" debe ser que sea suficiente para utilizar dicho método con el objeto "TBitmap".

No es que quiera seguir el camino fácil y no darle muchas vueltas al asunto, sino que, como digo al principio, si no estoy equivocado, es raro el uso de paletas de colores (al menos de las paletas de colores que representan los objetos de que hablamos) y tengo para mí que algo ligado al pasado.

En todo caso, ya digo, comenzando (recalco comenzando) por la ayuda que se te ofrece en el SDK Win32 sobre la función "CreatePalette" deberías poder crear ese tipo de objetos.

Probablemente alguien podrá aportar algo más de información que nos ilustre sobre este tipo de objetos y sus usos y, si algún día hubo de vérselas con alguno, tal vez aportar algo de código a modo de ejemplo.

Respecto a:

Cita:

Empezado por supermilloriver
(...) me gustaria saberlo porque me serviria para otros problemas (...)

Tal vez sería bien que aclararas un poco los mismos, puesto que, si es como intuyo, para lo que es el problema con el que iniciaste este Hilo, que era el uso del método "LoadFromClipboardFormat", creo no lo habrá para utilizar este según la propia ayuda de Delphi en su ejemplo hace, tal como te refiere German arriba.


La franja horaria es GMT +2. Ahora son las 14:34:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi