using System;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.Text;
class Test
{
public static void Main(string[] args)
{
int BmpW = 30 * 256;
int BmpH = 20 * 256;
Bitmap TestBmp = new Bitmap(BmpW, BmpH, PixelFormat.Format24bppRgb);
Stopwatch SW = new Stopwatch();
SW.Start();
Console.WriteLine("Start");
GraphicsUnit GUP = GraphicsUnit.Pixel;
BitmapData TestBmp__ = TestBmp.LockBits(Rectangle.Round(TestBmp.GetBounds(ref GUP)), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
Console.WriteLine("Po zablokowaniu: " + SW.ElapsedMilliseconds);
unsafe
{
byte* TestBmp_ = (byte*)TestBmp__.Scan0;
int TestBmp__Stride = TestBmp__.Stride;
int Ptr = 0;
for (int YY = 0; YY < 10; YY++)
{
for (int XX = 0; XX < 10; XX++)
{
int PtrOffset = (TestBmp__Stride * 512 * YY) + (768 * 3 * XX);
Ptr = PtrOffset;
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(0);
TestBmp_[Ptr + 1] = (byte)(Y);
TestBmp_[Ptr + 2] = (byte)(X);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
Ptr = PtrOffset + (3 * 256);
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(Y);
TestBmp_[Ptr + 1] = (byte)(X);
TestBmp_[Ptr + 2] = (byte)(0);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
Ptr = PtrOffset + 3 * 512;
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(X);
TestBmp_[Ptr + 1] = (byte)(0);
TestBmp_[Ptr + 2] = (byte)(Y);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
Ptr = PtrOffset + (TestBmp__Stride * 256);
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(255);
TestBmp_[Ptr + 1] = (byte)(Y);
TestBmp_[Ptr + 2] = (byte)(X);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 256);
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(Y);
TestBmp_[Ptr + 1] = (byte)(X);
TestBmp_[Ptr + 2] = (byte)(255);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 512);
for (int Y = 0; Y < 256; Y++)
{
for (int X = 0; X < 256; X++)
{
TestBmp_[Ptr + 0] = (byte)(X);
TestBmp_[Ptr + 1] = (byte)(255);
TestBmp_[Ptr + 2] = (byte)(Y);
Ptr += 3;
}
Ptr = Ptr + TestBmp__Stride - (3 * 256);
}
}
}
}
Console.WriteLine("Przed odblokowaniem: " + SW.ElapsedMilliseconds);
TestBmp.UnlockBits(TestBmp__);
Console.WriteLine("Stop");
Console.WriteLine(SW.ElapsedMilliseconds);
try
{
TestBmp.Save("/home/xxx/TestNet.png", ImageFormat.Png);
}
catch (Exception E)
{
}
}
}