entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Delphi 7 - Imagen PNG no es mostrada

Primero pido disculpas si no me expreso bien en cuanto terminos y demás, es que soy totalmente novato en Delphi y en cuanto a lo que se refiere a programación, espero no molestar a nadie con mi pregunta.

Resulta que tengo un proyecto y queria editar su interfaz, solo eso, y usar imagenes en PNG para mejor diseño o resultado, ya que el que trae esta en formato BMP y no me gusta mucho.

Bueno el proyecto esta escrito con Delphi 7, asi qye baje el component PNG Components y lo añadi para poder insertar imagenes en este formato al proyecto.
El problema esta en cuando quiero cargar la imagen en formato PNG para reemplazar la que trae en BMP, cuando compilo y abro la aplicación, el form aparece invisible.

Aqui dejo un trozo del codigo que seguramente deba modificar o realizar ciertos cambios para lograr mi cometido. (ahi esta el problema, yo no se como hacerlo):

procedure TFMain.FormCreate(Sender: TObject);
var
  regn, tmpRegn, x, y: integer;
  nullClr: TColor;
  Settings: TInifile;
begin
  FMain.Brush.Bitmap := Image1.Picture.Bitmap;
  nullClr := Image1.Picture.Bitmap.Canvas.Pixels[0, 0];
  regn := CreateRectRgn(0, 0, Image1.Picture.Graphic.Width,
    Image1.Picture.Graphic.Height);
  for x := 1 to Image1.Picture.Graphic.Width do
    for y := 1 to Image1.Picture.Graphic.Height do
      if Image1.Picture.Bitmap.Canvas.Pixels[x - 1, y - 1] = nullClr then
      begin
        tmpRegn := CreateRectRgn(x - 1, y - 1, x, y);
        CombineRgn(regn, regn, tmpRegn, RGN_DIFF);
        DeleteObject(tmpRegn);
      end;
  SetWindowRgn(FMain.Handle, regn, True);
end;

Muchas gracias desde ya por leer mi pregunta y tomarse el tiempo de responder.

1 Respuesta

1voto

Leonardo-Tadei Puntos227320

Hola,

el código que muestras parte del contenido de Image1.Picture.Bitmap

No conozco el componente PNG Components, pero si es parte de la VCL, habrá puesto su ícono en la barra de herramientas. En este caso, debes sacar el TImage llamado Image1 y cambiarlo por un componente de los que provee PNG Components... si lo llamas Image1, todo debería funcionar igual.

Si el componente tiene las mismas propiedades que un TImage1, ahí acaba tu problema. Si no tiene las mismas propiedades, te metiste en un lío grave, porque tendrías que reescribir todo el procesado de la imagen en el componente, que si no veo mal, consiste en ponerla de fondo como un mosaico.

No quiero ser aguafiestas, pero, no te conviene guardar el PNG como BMP, cambiarlo en el TImage y no tocar el código?. Harías todo esto desde el Inspector de Objetos...

Un PNG puede ocupar menos espacio en el disco, con lo que el EXE será algo más chico, pero para mostrar una imagen en la pantalla, hay que convertirla a un mapa de bits (BMP), con lo que usar un formato distinto implica más procesamiento y consumo de RAM.

Saludos!

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta