📄 impalphablendingtransform.cs
字号:
namespace Imps.Utils
{
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
public class ImpAlphaBlendingTransform : IImageTransform
{
private float _percentage;
public ImpAlphaBlendingTransform(float percentage)
{
this._percentage = percentage;
}
private static ImageCodecInfo GetEncoderInfo(string type)
{
ImageCodecInfo[] imageEncoders = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i < imageEncoders.Length; i++)
{
if (imageEncoders[i].MimeType == type)
{
return imageEncoders[i];
}
}
return null;
}
private IImage MakeImageTransparent(IImage image, float percentage)
{
if ((percentage < 0f) || (percentage > 1f))
{
throw new ArgumentOutOfRangeException("Percentage should between 0 and 1!");
}
Image image2 = image.Image;
if (image.Image.PixelFormat != PixelFormat.Format32bppArgb)
{
IImage image3 = new BaseImage(new Bitmap(image.Width, image.Height, PixelFormat.Format32bppArgb));
using (Graphics graphics = Graphics.FromImage(image3.Image))
{
graphics.DrawImage(image.Image, 0, 0);
}
image = image3;
}
int num = (image.Width * image.Height) * 4;
MemoryStream stream = new MemoryStream((num + (num / 0x1000)) + 300);
ImageCodecInfo encoder = GetEncoderInfo("image/tiff");
EncoderParameter parameter = new EncoderParameter(Encoder.Compression, (long) 6);
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = parameter;
try
{
image.Image.Save(stream, encoder, encoderParams);
}
catch (Exception exception)
{
throw exception;
}
int num2 = (int) (percentage * 32768f);
byte[] buffer = stream.GetBuffer();
for (int i = 11; i < (num + 8); i += 4)
{
buffer[i] = (byte) ((buffer[i] * num2) >> 15);
}
if (image != image2)
{
image.Dispose();
}
stream.Seek((long) 0, SeekOrigin.Begin);
image = new BaseImage(new Bitmap(stream));
return image;
}
public IImage Transform(IImage image)
{
return this.MakeImageTransparent(image, this._percentage);
}
public float Percentage
{
get
{
return this._percentage;
}
set
{
if ((value < 0f) || (value > 1f))
{
throw new ArgumentOutOfRangeException("Percentage should between 0 and 1!");
}
this._percentage = value;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -