Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Gráficos (https://www.clubdelphi.com/foros/forumdisplay.php?f=8)
-   -   Modificación del Truco 467 (https://www.clubdelphi.com/foros/showthread.php?t=59973)

madiazg 16-09-2008 09:52:32

Modificación del Truco 467
 
Hola a todos,
estoy usando el Truco 467 para mostrar en un ListView los thumbnail de unas imágenes. La dificultad que tengo es que el color de fondo de estos thumbnail es blanco y necesito que sea de otro color.
¿Hay alguna forma de modificar el color de fondo de los thumbnail?

Saludos...
Miguel Angel
imagen3d.site88.net/

duilioisola 16-09-2008 15:41:17

Lo quieres porque necesitas que sea transparete?
Si es así:

Del Help de Delphi6:
Cita:

TBitmap.TransparentColor
Determines which color of the bitmap is to be transparent when the bitmap is drawn.

property TransparentColor: TColor;

Description

Use TransparentColor to determine how to draw the bitmap transparently. When the TransparentMode property is set to tmAuto (default), TransparentColor returns the color of the first pixel in the bitmap image data. For "bottom-up" bitmaps, the first pixel is the bottom leftmost pixel shown onscreen. For "top-down" bitmaps (less common), the first pixel is in the top left corner shown onscreen.

If TransparentColor is assigned, the TransparentMode is automatically set to tmFixed so that the new transparent color can be used later. If you want TransparentColor to disregard any assignments and return the bottom leftmost pixel color again, set TransparentMode to tmAuto.

madiazg 16-09-2008 17:10:41

Hola,
gracias por contestar, aunque esta solución tiene una pega. Si coloco el fondo blanco como transparente, todas las partes del thumbnail (fotografía) de color blanco también serían transparentes con lo que adoptaría el color del fondo (en mi caso oscuro). He probado con una fotos con cielo quemado y queda faltal.
El motivo es simplemente estético. El listview es de color oscuro a tono con el resto del form.

Saludos...
Miguel Angel

duilioisola 16-09-2008 20:12:16

En este momento no tengo Delphi para probarlo, pero puede ser que el color transparete sea el negro ($000000).

De no ser así, habría que averiguar como define Windows el color transparente.

Creo que a partir de WinNT el color transparete es nego. Antes era le blanco.
Pruébalo y nos cuentas como te fue.

cHackAll 17-09-2008 02:48:07

Una de mis principales frustraciones antes de escribir dicho truco era mi incapacidad de reconocer formatos estándares que para Delphi no lo eran así (png, gif, jpeg, etc.) y con mi clásico desacuerdo al uso de componentes debía encontrar una solución. Una vez probada la interfaz IExtractImage noté que también podía crear vistas en miniatura de una amplia gama de formatos no gráficos a una velocidad considerablemente superior a otras pruebas realizadas, el problema que describes me pareció algo secundario y obviamente lo deje pasar.

Ahora no tengo en mente alguna propiedad de alguna interfaz que pueda ser de utilidad para el caso, pero suponiendo que estas utilizando las vistas en miniatura en tu proyecto de gráficos te doy una alternativa igualmente nativa; prueba el siguiente código utilizando ésta unidad y me cuentas ;)

Código Delphi [-]
...
 
uses Viewer;
 
{$r *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var Image: TBitmap;
begin
 Image := GetImage('ClubDelphi.png'{, Tamaño del Thumbnail [opcional]}{, Color de fondo [opcional]});
 if Assigned(Image) then
  begin
   Image1.Picture.Assign(Image);
   Image.Destroy;
  end;
end;

Notarás que no necesitamos Delphi2009 o un montón de componentes para reconocer un buen numero de formatos de imágenes :cool:

Saludos

madiazg 17-09-2008 18:17:28

Muchas gracias cHackAll. Funciona perfectamente.
Saludos...
Miguel Angel

capo979 13-01-2009 13:14:37

Estoy probando el truco 467 y donde dice

Código Delphi [-]
type
 IExtractImage = interface ['{BB2E617C-0920-11d1-9A0B-00C04FC2D6C1}'] // http://msdn2.microsoft.com/en-us/lib...48(VS.85).aspx
  function GetLocation(pszPathBuffer: PWideChar    {LPWSTR}; cchMax: DWORD; var pdwPriority: DWORD; const prgSize: SIZE; dwRecClrDepth: DWORD; var pdwFlags: DWORD): HRESULT; stdcall;
  function Extract(var phBmpImage: HBITMAP): HRESULT; stdcall;
 end;

me salta el error

undeclared identifier HBITMAP

y en el uses le pongo la unidad Graphics

alguién me puede ayudar porque no lo puedo probar

muchas gracias

saludos

cHackAll 13-01-2009 20:07:39

Código Delphi [-]
..., Windows, ...

capo979 14-01-2009 12:56:41

Cuando pongo el siguiente código

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 Image1.Picture.Assign(GetThumbnail('c:\windows\web\wallpaper', 'ascent.jpg', 96, 96));
end;

En Image1 no aparece nada no se ve nada

que puede ser

Saludos

cHackAll 13-04-2009 17:57:56

1 Archivos Adjunto(s)
Intentando escribir la unidad Viewer en BCB6, obtuve los errores E2268, E2015 y W8022. Aparte de ello no encontré por ningún lado la librería necesaria con las APIs importadas desde GDI+ para que Viewer funcione.

Cita:

Empezado por vicmac3009
Que tal:

vi un post, http://chackall.clubdelphi.com/Viewer.pas, y quisiera saber si fuera posible que me explicaras o pudieras ayudar a traducir el código a c++...

Descarga el archivo adjunto.

Considerando que BCB6 es incapaz de trabajar con GDI+ sin tener que modificar sus cabezales; he importado a Viewer.pas en un proyecto de BCB y he añadido la librería faltante con las APIs de GDI+.

Nota; vicmac3009 siempre que tengas alguna duda escríbela en el hilo/subforo correspondiente para que cualquier miembro te ayude y para que la respuesta ayude a otros miembros.

Saludos


La franja horaria es GMT +2. Ahora son las 17:00:30.

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