ASP.NET直接写透明GIF图像到输出流源代码
写图片到HTTP-Response输出流是非常简单的,不过写一个透明的GIF图像到输出流就比较困难了。这个程序,在ASP.NET中使用C#语言先创建调色板,然后改变所有Alpha值到0,这时候才会透明GIF中的透明颜色。
System.Drawing.Image _gifImage;
_gifImage = System.Drawing.Image.FromFile(Server.MapPath("white.JPG"));
Bitmap bm = new Bitmap(_gifImage.Width, _gifImage.Height,
PixelFormat.Format8bppIndexed);
// Get the palette from the bitmap
ColorPalette pal = bm.Palette;
// Set Alpha to 0
for (int i = 0; i < pal.Entries.Length; i++)
{
Color col = pal.Entries[i];
pal.Entries[i] = Color.FromArgb(0, col.R, col.G, col.B);
}
// assign palette
bm.Palette = pal;
//to copy the bitmap data we need to lock the source &
//destination bits
BitmapData src = ((Bitmap)_gifImage).LockBits(new Rectangle
(0, 0, _gifImage.Width, _gifImage.Height), ImageLockMode.ReadOnly,
_gifImage.PixelFormat);
BitmapData dst = bm.LockBits(new Rectangle(0, 0, bm.Width, bm.Height),
ImageLockMode.WriteOnly, bm.PixelFormat);
//finished, unlock the bits
((Bitmap)_gifImage).UnlockBits(src);
bm.UnlockBits(dst);
//Set Response Type to "image/gif"
Response.ContentType = "image/gif";
//Writing the gif directly into the Output-Stream
bm.Save(Response.OutputStream, ImageFormat.Gif);
//cleaning up
bm.Dispose();
_gifImage.Dispose();
//Send output stream
Response.Flush();
System.Drawing.Image _gifImage;
_gifImage = System.Drawing.Image.FromFile(Server.MapPath("white.JPG"));
Bitmap bm = new Bitmap(_gifImage.Width, _gifImage.Height,
PixelFormat.Format8bppIndexed);
// Get the palette from the bitmap
ColorPalette pal = bm.Palette;
// Set Alpha to 0
for (int i = 0; i < pal.Entries.Length; i++)
{
Color col = pal.Entries[i];
pal.Entries[i] = Color.FromArgb(0, col.R, col.G, col.B);
}
// assign palette
bm.Palette = pal;
//to copy the bitmap data we need to lock the source &
//destination bits
BitmapData src = ((Bitmap)_gifImage).LockBits(new Rectangle
(0, 0, _gifImage.Width, _gifImage.Height), ImageLockMode.ReadOnly,
_gifImage.PixelFormat);
BitmapData dst = bm.LockBits(new Rectangle(0, 0, bm.Width, bm.Height),
ImageLockMode.WriteOnly, bm.PixelFormat);
//finished, unlock the bits
((Bitmap)_gifImage).UnlockBits(src);
bm.UnlockBits(dst);
//Set Response Type to "image/gif"
Response.ContentType = "image/gif";
//Writing the gif directly into the Output-Stream
bm.Save(Response.OutputStream, ImageFormat.Gif);
//cleaning up
bm.Dispose();
_gifImage.Dispose();
//Send output stream
Response.Flush();