public CreateImage ( |
||
targetImage | ||
pointer | ||
Résultat | void |
public unsafe void CreateImage(Bitmap targetImage, IntPtr pointer)
{
var area = new System.Drawing.Rectangle(0, 0, targetImage.Width, targetImage.Height);
BitmapData bitmapData = targetImage.LockBits(area, ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
byte* pImage = (byte*)pointer.ToPointer();
byte* pDest = (byte*)bitmapData.Scan0.ToPointer();
int maxIndex = area.Width * area.Height;
for (int index = 0; index < maxIndex; index++)
{
pDest[0] = pImage[2];
pDest[1] = pImage[1];
pDest[2] = pImage[0];
pDest += 3;
pImage += 3;
}
targetImage.UnlockBits(bitmapData);
}
}
public void Can_Create_Color_Image() { var bitmap = new Bitmap(20, 10); var imageFactory = new RgbBitmapFactory(); var pointerFactory = new ArrayToPointerFactory(); var data = new ushort[20 * 10 * 2]; for (int index = data.Length / 2; index < data.Length; index++) { data[index] = ushort.MaxValue; } var pointer = pointerFactory.CreatePointer(data); try { imageFactory.CreateImage(bitmap, pointer); } finally { pointerFactory.Destroy(pointer); } var color = bitmap.GetPixel(0, 0); var color2 = bitmap.GetPixel(10, 9); Assert.AreEqual(0, color.R); Assert.AreEqual(0, color.G); Assert.AreEqual(0, color.B); Assert.AreEqual(255, color2.R); Assert.AreEqual(255, color2.G); Assert.AreEqual(255, color2.B); }