Comment dessiner une image transparente en utilisant System.Drawing?
Je vais essayer de revenir un GIF transparent à partir d'un .page aspx pour l'affichage dans une page web. Je suis en train d'essayer d'obtenir l'image pour avoir la transparence, mais je reçois Noir être à l'endroit où l'image doit être Transparent.
Personne ne sait ce que je fais mal?
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
'' Change the response headers to output a GIF image.
Response.Clear()
Response.ContentType = "image/gif"
Dim width = 110
Dim height = width
'' Create a new 32-bit bitmap image
Dim b = New Bitmap(width, height)
'' Create Grahpics object for drawing
Dim g = Graphics.FromImage(b)
Dim rect = New Rectangle(0, 0, width - 1, height - 1)
'' Fill in with Transparent
Dim tbrush = New System.Drawing.SolidBrush(Color.Transparent)
g.FillRectangle(tbrush, rect)
'' Draw Circle Border
Dim bPen = Pens.Red
g.DrawPie(bPen, rect, 0, 365)
'' Fill in Circle
Dim cbrush = New SolidBrush(Color.LightBlue)
g.FillPie(cbrush, rect, 0, 365)
'' Clean up
g.Flush()
g.Dispose()
'' Make Transparent
b.MakeTransparent()
b.Save(Response.OutputStream, Imaging.ImageFormat.Gif)
Response.Flush()
Response.End()
End Sub
source d'informationauteur Chris Pietschmann
Vous devez vous connecter pour publier un commentaire.
Malheureusement, il n'y a pas de moyen facile de créer un Gif transparent à l'aide d'un objet Bitmap. (Voir cet article KB)
Alternativement, vous pouvez utiliser le format PNG qui prend en charge la transparence avec le code que vous utilisez.
Oui, Jérôme a déclaré, il n'y a pas de toute façon à créer transparent GIF à l'aide d'un objet Bitmap. Merde!
Bien, de toute façon, j'ai changé mon code pour générer un PNG et tout fonctionne comme prévu.
Il y a un petit travail autour je n'ai besoin de le faire puisque vous ne pouvez pas écrire PNG directement à l'OutputStream. J'avais besoin d'écrire le format PNG pour un MemoryStream, puis d'écrire à l'OutputStream.
Voici le code final pour ma mise en œuvre:
Il est possiblemais pas facile
Si vous êtes en mesure d'utiliser le code unsafe dans votre projet, il existe quelques méthodes pour utiliser des pointeurs pour déchirer la couleur de la table et de faire la transparence de travail.
Un échantillon de formulaires d'application par Bob Powell est disponible ici http://www.bobpowell.net/giftransparency.htm. J'ai utilisé une variante de cette méthode sur un site web handler, il y a quelques années qui a été touché environ 10 millions de fois en un mois, et il semble bien fonctionner.
Si vous êtes seulement en utilisant une palette de couleurs limitée, vous pouvez réduire la couleur de la table de traitement pour que les couleurs dont vous avez besoin (ne me souviens pas exactement comment je l'ai fait...).
Cela étant dit, la png est une métrique criss c'est n'importe plus facile.
voici un code pour avoir un gif (qui ont déjà transparence) transformé (supposé que vous souhaitez redimensionner) en bitmap et puis peut-être montré correctement avec la transparence.
Bonne chance !
Grégoire Lafortune