/// 獲取指定透明度的圖像
/// </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;
}
}