moel@345
|
1 |
using System;
|
moel@345
|
2 |
using System.Collections.Generic;
|
moel@345
|
3 |
using System.Text;
|
moel@345
|
4 |
using System.Drawing;
|
moel@345
|
5 |
using System.Runtime.InteropServices;
|
moel@345
|
6 |
using System.Drawing.Imaging;
|
moel@345
|
7 |
|
moel@345
|
8 |
namespace Aga.Controls
|
moel@345
|
9 |
{
|
moel@345
|
10 |
public static class BitmapHelper
|
moel@345
|
11 |
{
|
moel@345
|
12 |
[StructLayout(LayoutKind.Sequential)]
|
moel@345
|
13 |
private struct PixelData
|
moel@345
|
14 |
{
|
moel@345
|
15 |
public byte B;
|
moel@345
|
16 |
public byte G;
|
moel@345
|
17 |
public byte R;
|
moel@345
|
18 |
public byte A;
|
moel@345
|
19 |
}
|
moel@345
|
20 |
|
moel@345
|
21 |
public static void SetAlphaChanelValue(Bitmap image, byte value)
|
moel@345
|
22 |
{
|
moel@345
|
23 |
if (image == null)
|
moel@345
|
24 |
throw new ArgumentNullException("image");
|
moel@345
|
25 |
if (image.PixelFormat != PixelFormat.Format32bppArgb)
|
moel@345
|
26 |
throw new ArgumentException("Wrong PixelFormat");
|
moel@345
|
27 |
|
moel@345
|
28 |
BitmapData bitmapData = image.LockBits(new Rectangle(0, 0, image.Width, image.Height),
|
moel@345
|
29 |
ImageLockMode.ReadWrite, PixelFormat.Format32bppArgb);
|
moel@345
|
30 |
unsafe
|
moel@345
|
31 |
{
|
moel@345
|
32 |
PixelData* pPixel = (PixelData*)bitmapData.Scan0;
|
moel@345
|
33 |
for (int i = 0; i < bitmapData.Height; i++)
|
moel@345
|
34 |
{
|
moel@345
|
35 |
for (int j = 0; j < bitmapData.Width; j++)
|
moel@345
|
36 |
{
|
moel@345
|
37 |
pPixel->A = value;
|
moel@345
|
38 |
pPixel++;
|
moel@345
|
39 |
}
|
moel@345
|
40 |
pPixel += bitmapData.Stride - (bitmapData.Width * 4);
|
moel@345
|
41 |
}
|
moel@345
|
42 |
}
|
moel@345
|
43 |
image.UnlockBits(bitmapData);
|
moel@345
|
44 |
}
|
moel@345
|
45 |
}
|
moel@345
|
46 |
}
|