System.Drawing.Graphics.DrawImage
將一個圖像粘貼到另一個圖像上。但我找不到透明度選項。如何製作一個System.Drawing.Image半透明?
我已經得出我想要的一切的形象,我只是想使它半透明(alpha透明度)
System.Drawing.Graphics.DrawImage
將一個圖像粘貼到另一個圖像上。但我找不到透明度選項。如何製作一個System.Drawing.Image半透明?
我已經得出我想要的一切的形象,我只是想使它半透明(alpha透明度)
沒有「透明度」選項,因爲您試圖做的是稱爲Alpha混合。
public static class BitmapExtensions
{
public static Image SetOpacity(this Image image, float opacity)
{
var colorMatrix = new ColorMatrix();
colorMatrix.Matrix33 = opacity;
var imageAttributes = new ImageAttributes();
imageAttributes.SetColorMatrix(
colorMatrix,
ColorMatrixFlag.Default,
ColorAdjustType.Bitmap);
var output = new Bitmap(image.Width, image.Height);
using (var gfx = Graphics.FromImage(output))
{
gfx.SmoothingMode = SmoothingMode.AntiAlias;
gfx.DrawImage(
image,
new Rectangle(0, 0, image.Width, image.Height),
0,
0,
image.Width,
image.Height,
GraphicsUnit.Pixel,
imageAttributes);
}
return output;
}
}
[ColorMatrix](http://msdn.microsoft.com/en-us/library/system.drawing.imaging.colormatrix(v = vs.110 ).aspx)+ [ImageAttributes](http://msdn.microsoft.com/en-us/library/system.drawing.imaging.imageattributes(v = vs.110).aspx)+ [SmoothingMode](http:/ /msdn.microsoft.com/en-us/library/z714w2y9(v=vs.110).aspx) – Bitterblue 2014-01-28 10:27:33
我複製從米奇提供的鏈接,我覺得會爲我工作的答案:
public static Bitmap SetOpacity(this Bitmap bitmap, int alpha)
{
var output = new Bitmap(bitmap.Width, bitmap.Height);
foreach (var i in Enumerable.Range(0, output.Palette.Entries.Length))
{
var color = output.Palette.Entries[i];
output.Palette.Entries[i] =
Color.FromArgb(alpha, color.R, color.G, color.B);
}
BitmapData src = bitmap.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly,
bitmap.PixelFormat);
BitmapData dst = output.LockBits(
new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.WriteOnly,
output.PixelFormat);
bitmap.UnlockBits(src);
output.UnlockBits(dst);
return output;
}
它沒有工作,因爲Bitmap.Pallete.Entries是空的 – 2010-02-04 16:26:26
private Image GetTransparentImage(Image image, int alpha)
{
Bitmap output = new Bitmap(image);
for (int x = 0; x < output.Width; x++)
{
for (int y = 0; y < output.Height; y++)
{
Color color = output.GetPixel(x, y);
output.SetPixel(x, y, Color.FromArgb(alpha, color.R, color.G, color.B));
}
}
return output;
}
http://stackoverflow.com/questions/189392/how-do-you-draw-transparent-image-using-system-drawing – 2010-02-04 15:54:16
@米奇小麥 - 這個問題特定於GIF – Oded 2010-02-04 15:56:01
GIF沒有半透明度。我在這裏討論PNG – 2010-02-04 15:58:17