PDA

Ver la Versión Completa : Invalid image size en ImageList


Ramsay
29-09-2016, 19:48:30
El codigo :

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 :


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.

...
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:
https://s16.postimg.org/pg0gt2l0l/Ramsay.gif

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.