Discúlpame, pero no queda muy claro los dos primeros pasos si pudiera ejemplificar un poco, sería magnifico.
Gracias
Gracias
Cita de: Eleкtro en 22 Diciembre 2015, 18:15 PM
Creo que te refieres a lo siguiente, y te sugiero hacerlo de la siguiente manera:
1. Mantener una referencia a la imagen original, opaca.
2. Crear una copia de la imagen opaca, con la transparencia deseada;
cada vez que quieras modificar la transparencia haces una copia de la imagen opaca, y liberas los recursos de la copia semi-transparente anterior.
Código sacado de mi framework y modificado un poco a las circunstancias:Código (vbnet) [Seleccionar]''' ----------------------------------------------------------------------------------------------------
''' <summary>
''' Sets the opacity of an <see cref="Image"/>.
''' </summary>
''' ----------------------------------------------------------------------------------------------------
''' <example> This is a code example.
''' <code>
''' Dim img As Image = Bitmap.FromFile("C:\File.png").SetOpacity(opacity:=0.5F)
''' </code>
''' </example>
''' ----------------------------------------------------------------------------------------------------
''' <param name="sender">
''' The source <see cref="Image"/>.
''' </param>
'''
''' <param name="opacity">T
''' The target opacity level, from <c>0.0</c> to <c>1.0</c>.
''' </param>
''' ----------------------------------------------------------------------------------------------------
''' <returns>
''' The <see cref="Image"/> with the opacity applied.
''' </returns>
''' ----------------------------------------------------------------------------------------------------
''' <exception cref="ArgumentOutOfRangeException">
''' opacity
''' </exception>
''' ----------------------------------------------------------------------------------------------------
<DebuggerStepThrough>
Public Function SetOpacity(ByVal sender As Image, ByVal opacity As Single) As Image
If (opacity < 0.0F) OrElse (opacity > 1.0F) Then
Throw New ArgumentOutOfRangeException(paramName:="opacity")
Else
Using g As Graphics = Graphics.FromImage(sender)
Dim matrix As New ColorMatrix
matrix.Matrix33 = opacity
Using ia As New ImageAttributes
ia.SetColorMatrix(matrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap)
g.DrawImage(sender, New Rectangle(0, 0, sender.Width, sender.Height), 0, 0, sender.Width, sender.Height, GraphicsUnit.Pixel, ia)
End Using
End Using
Return sender
End If
End Function
Source original:
Saludos!