PDA

Ver la Versión Completa : Problema con el transparente


supermilloriver
27-07-2005, 00:23:03
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:


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):

Image1.Picture.Bitmap.TransparentColor := Image1.Picture.Bitmap.Canvas.Pixels[0,0];
Image1.Transparent := True;

O bien, asignarle directamente un color transparente:

Image1.Picture.Bitmap.TransparentColor := clRed;
Image1.Transparent := True;

O

Image1.Picture.Bitmap.TransparentColor := $00FF8484;
Image1.Transparent := True;


Salu2.

supermilloriver
28-07-2005, 00:52:41
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
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":


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:


(...) 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.