c#编程从像中提取数据在问题
/// <summary>
/// 获取指定透明度的图像
/// </summary>
/// <param name="SourceBitmap">源图像</param>
/// <param name="OpaCityValue">透明度百分比</param>
/// <returns></returns>
/// <remarks></remarks>
public Bitmap TheTransparentBitmap(Bitmap SourceBitmap, double OpaCityValue)
{
try {
//定义临时图片副本
Bitmap ForOutBitmap = new Bitmap(SourceBitmap);
//定义图像数据
BitmapData bmpDATA = new BitmapData();
//将图像指定区域数据赋值
bmpDATA = ForOutBitmap.LockBits(new Rectangle(0, 0, SourceBitmap.Width - 1, SourceBitmap.Height - 1), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
//定义用来计算的Byte数组
byte[] BTS = new byte[bmpDATA.Stride * bmpDATA.Height + 1];
//将Byte设置为指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(bmpDATA.Scan0, BTS, 0, BTS.Length - 1);
//为避免"除数不可为0"而设置的计算用变量
int tmpValue = 0;
//因已经指定为32位ARGB模式,所以每4个排列为 B G R A,A即透明度
for (int I = 0; I <= BTS.Length - 4; I += 4) {
tmpValue = BTS[I + 3] * OpaCityValue;
//修改A透明度
BTS[I + 3] = tmpValue;
}
//完成计算后将Byte组返回给指定的图像数据
System.Runtime.InteropServices.Marshal.Copy(BTS, 0, bmpDATA.Scan0, BTS.Length - 1);
//解锁该图像数据以使调用线程继续执行
ForOutBitmap.UnlockBits(bmpDATA);
//返回处理后的图像
return ForOutBitmap;
} catch (Exception ex) {
//如出现异常则返回空值
return null;
}
}