delphi - ¿Es posible eliminar un contorno horrible alrededor de un glifo de TSpeedButton?
glyph (1)
El problema es claramente que el canal alfa se ignora en la imagen de la izquierda. Ahora, la propiedad TSpeedButton.Glyph
es un TBitmap
, por lo que podría ser problemático preservar el canal alfa PNG. Por ejemplo,
var
png: TPNGImage;
begin
png := TPngImage.Create;
png.LoadFromFile(''C:/Users/Andreas Rejbrand/Pictures/alpha.png'');
SpeedButton1.Glyph.Assign(png); // or png.AssignTo(SpeedButton1.Glyph);
produce
http://privat.rejbrand.se/speedbuttonalpha.png
Una solución parcial es premezclar la imagen PNG:
var
png: TPNGImage;
bm: TBitmap;
begin
png := TPngImage.Create;
png.LoadFromFile(''C:/Users/Andreas Rejbrand/Pictures/alpha.png'');
bm := TBitmap.Create;
bm.SetSize(png.Width, png.Height);
bm.Canvas.Brush.Color := Self.Color;
bm.Canvas.FillRect(Rect(0, 0, bm.Width, bm.Height));
bm.Canvas.Draw(0, 0, png);
SpeedButton1.Glyph.Assign(bm);
Me he encontrado con un pequeño inconveniente, ¿soy yo o no puedes asignar una imagen de un recurso al glifo de TSpeedButton sin un espantoso contorno negro como se muestra a continuación?
Lo he asignado exactamente de la misma manera para el componente TImage y estoy obteniendo el resultado necesario.
He estado buscando durante bastante tiempo, pero nadie parece tener este extraño y molesto problema.
Aquí está mi código fuente para el siguiente formulario:
procedure TForm3.Button1Click(Sender: TObject);
var r : tresourcestream; png : tpngimage;
begin
r := tresourcestream.CreateFromID(hinstance,34,''cardimage'');
png := tpngimage.Create;
png.LoadFromStream(r);
png.AssignTo(image1.Picture.bitmap);
png.AssignTo(speedbutton1.glyph);
png.Free;
r.Free;
end;
34 es la imagen del tipo ''cardimage'' que se relaciona con la imagen que se muestra en la imagen si aún no lo ha adivinado.