delphi glyph

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);

http://privat.rejbrand.se/speedbuttonalpha2.png

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.