Hola Olenkaguilar.
Por tu mensaje veo que estas usando una versión Delphi superior a la mía y PnpImage difiere. Y aunque, salvadas las diferencias, tu código no me degrada las imágenes, proba de esta forma por las dudas.
Te pongo un ejemplo que usa 3 SpeedButtons y tres imágenes .png guardadas en imágenes.res.
Archivo imagenes.rc:
Código:
1 RCDATA Burn_48x48.png
2 RCDATA cancel_48x48.png
3 RCDATA User_48x48.png
Y luego de :
Código:
brc32 -r -v imagenes.rc
Este código:
Código Delphi
[-]
...
implementation
{$R imagenes.res}
uses PngImage;
procedure LoadPngFromRes(const ResName: string; const Index: Integer; Pic: TPicture);
var
RE : TResourceStream;
begin
with TPngObject.Create do
try
RE := TResourceStream.Create(hInstance, '#'+ IntToStr(Index), RT_RCDATA);
try
RE.Seek(0, soFromBeginning);
LoadFromStream(RE);
AssignTo(Pic);
finally
RE.Free;
end;
finally
Free;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
C : TComponent;
begin
for i := 1 to 3 do
begin
C := FindComponent('SpeedButton' + IntToStr(i));
if C <> nil then
begin
TSpeedButton(C).Flat := True;
LoadPngFromRes('IMAGEN.RES', i, TPicture(TSpeedButton(C).Glyph));
end;
end;
end;
...
Con este resultado:

Nota: Para que funcione el ejemplo, es necesario que los
TSpeedButtons se llamen
SpeedButton1,
SpeedButton2 y
SpeedButton3.
Saludos.
Edito: La degradación, también podría deberse a algún problema con el formato de las imágenes y no a como son tratadas en tu código...