Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Invalid image size en ImageList (https://www.clubdelphi.com/foros/showthread.php?t=90894)

Ramsay 29-09-2016 19:48:30

Invalid image size en ImageList
 
El codigo :

Código Delphi [-]
  png := TPngImage.Create();
  Bitmap := TBitmap.Create();

  png.LoadFromStream(stream);

  Bitmap.Height := png.Height;
  Bitmap.Width := png.Width;

  Bitmap.Assign(png);

  //R.Left := 0;
  //R.Top := 0;
  //R.Right := 16;
  //R.Bottom := 16;
  //Bitmap.Canvas.StretchDraw(R, Bitmap);

  imagelist1.Add(Bitmap, nil);

  png.Free();
  Bitmap.Free();

El problema es que cada vez que agrego el bmp al imagelist recibo Invalid Image Size , intente con la respuesta de este post : https://www.clubdelphi.com/foros/showthread.php?t=78278, pero siempre es el mismo error , el stream carga bien , lo probe en un timage normal y funciona , no se que mas tengo que hacer , ¿ como soluciono esto ?

Ramsay 29-09-2016 20:54:47

Bueno , por lo menos ahora ahora no hay errores :

Código Delphi [-]
  Bitmap.Assign(png);
  //Bitmap.PixelFormat := pf32bit;
  Bitmap.Height := imagelist1.Height;
  Bitmap.Width := imagelist1.Width;

se muestra la imagen en el listview pero la parte que sobra se ve en blanco , me explico , la imagen se ve bien pero tiene una parte blanca en la parte de abajo , es raro.

¿ esta solucion que hice genero este error ?

ecfisa 29-09-2016 21:20:40

Hola Ramsay.

Creo que usamos distintas versiones de Delphi y/o biblioteca para el manejo de png, pero del modo de este ejemplo no obtengo error, fijate si te sirve de algo.
Código Delphi [-]
...
uses PngImage;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ImageList1.Width  := 100;
  ImageList1.Height := 64;
end;

procedure ImageListAddPng(ImgLst: TImageList; const R: TRect; const PngFileName: string);
var
  png : TPngObject;
  bmp : TBitmap;
begin
  png := TPngObject.Create();
  bmp := TBitmap.Create();
  try
    png.LoadFromFile(PngFileName);
    bmp.PixelFormat := pf32bit;
    bmp.Height := png.Height;
    bmp.Width  := png.Width;
    bmp.Assign(png);
    bmp.Canvas.StretchDraw(R, bmp);
    ImgLst.Add(bmp, nil);
  finally
    png.Free();
    bmp.Free();
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ImageListAddPng(ImageList1, Rect(0, 0, 100, 64), 'facepalm.png');
  SpeedButton1.Caption := '';
  ImageList1.GetBitmap(0, SpeedButton1.Glyph);
end;

Salida:


Saludos :)

Ramsay 29-09-2016 21:44:51

gracias por la ayuda ecfisa , estoy en el mismo error , me esta comenzando a disgustar es error xD , el stream es una simple peticion get de una pagina web que tiene el png (uso indy) y lo quiero mostrar en el listview , es raro porque todo se ve bien en el timage , seguire buscado o sino descarto esta idea y sigo con el programa.
para mas datos , uso delphi xe2 ,el listview lo cargo como style report , y uso indy para cargar el stream del png.


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

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