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;

}

}