fork download
  1. using System;
  2. using System.Diagnostics;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. using System.Text;
  6.  
  7. class Test
  8. {
  9. public static void Main(string[] args)
  10. {
  11. int BmpW = 30 * 256;
  12. int BmpH = 20 * 256;
  13. Bitmap TestBmp = new Bitmap(BmpW, BmpH, PixelFormat.Format24bppRgb);
  14.  
  15. Stopwatch SW = new Stopwatch();
  16. SW.Start();
  17. Console.WriteLine("Start");
  18.  
  19. GraphicsUnit GUP = GraphicsUnit.Pixel;
  20. BitmapData TestBmp__ = TestBmp.LockBits(Rectangle.Round(TestBmp.GetBounds(ref GUP)), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
  21. Console.WriteLine("Po zablokowaniu: " + SW.ElapsedMilliseconds);
  22. unsafe
  23. {
  24. byte* TestBmp_ = (byte*)TestBmp__.Scan0;
  25. int TestBmp__Stride = TestBmp__.Stride;
  26.  
  27. int Ptr = 0;
  28.  
  29. for (int YY = 0; YY < 10; YY++)
  30. {
  31. for (int XX = 0; XX < 10; XX++)
  32. {
  33. int PtrOffset = (TestBmp__Stride * 512 * YY) + (768 * 3 * XX);
  34.  
  35. Ptr = PtrOffset;
  36. for (int Y = 0; Y < 256; Y++)
  37. {
  38. for (int X = 0; X < 256; X++)
  39. {
  40. TestBmp_[Ptr + 0] = (byte)(0);
  41. TestBmp_[Ptr + 1] = (byte)(Y);
  42. TestBmp_[Ptr + 2] = (byte)(X);
  43. Ptr += 3;
  44. }
  45. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  46. }
  47.  
  48. Ptr = PtrOffset + (3 * 256);
  49. for (int Y = 0; Y < 256; Y++)
  50. {
  51. for (int X = 0; X < 256; X++)
  52. {
  53. TestBmp_[Ptr + 0] = (byte)(Y);
  54. TestBmp_[Ptr + 1] = (byte)(X);
  55. TestBmp_[Ptr + 2] = (byte)(0);
  56. Ptr += 3;
  57. }
  58. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  59. }
  60.  
  61. Ptr = PtrOffset + 3 * 512;
  62. for (int Y = 0; Y < 256; Y++)
  63. {
  64. for (int X = 0; X < 256; X++)
  65. {
  66. TestBmp_[Ptr + 0] = (byte)(X);
  67. TestBmp_[Ptr + 1] = (byte)(0);
  68. TestBmp_[Ptr + 2] = (byte)(Y);
  69. Ptr += 3;
  70. }
  71. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  72. }
  73.  
  74. Ptr = PtrOffset + (TestBmp__Stride * 256);
  75. for (int Y = 0; Y < 256; Y++)
  76. {
  77. for (int X = 0; X < 256; X++)
  78. {
  79. TestBmp_[Ptr + 0] = (byte)(255);
  80. TestBmp_[Ptr + 1] = (byte)(Y);
  81. TestBmp_[Ptr + 2] = (byte)(X);
  82. Ptr += 3;
  83. }
  84. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  85. }
  86.  
  87. Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 256);
  88. for (int Y = 0; Y < 256; Y++)
  89. {
  90. for (int X = 0; X < 256; X++)
  91. {
  92. TestBmp_[Ptr + 0] = (byte)(Y);
  93. TestBmp_[Ptr + 1] = (byte)(X);
  94. TestBmp_[Ptr + 2] = (byte)(255);
  95. Ptr += 3;
  96. }
  97. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  98. }
  99.  
  100. Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 512);
  101. for (int Y = 0; Y < 256; Y++)
  102. {
  103. for (int X = 0; X < 256; X++)
  104. {
  105. TestBmp_[Ptr + 0] = (byte)(X);
  106. TestBmp_[Ptr + 1] = (byte)(255);
  107. TestBmp_[Ptr + 2] = (byte)(Y);
  108. Ptr += 3;
  109. }
  110. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  111. }
  112. }
  113. }
  114. }
  115. Console.WriteLine("Przed odblokowaniem: " + SW.ElapsedMilliseconds);
  116. TestBmp.UnlockBits(TestBmp__);
  117.  
  118. Console.WriteLine("Stop");
  119. Console.WriteLine(SW.ElapsedMilliseconds);
  120.  
  121. try
  122. {
  123. TestBmp.Save("/home/xxx/TestNet.png", ImageFormat.Png);
  124. }
  125. catch (Exception E)
  126. {
  127. }
  128. }
  129. }
  130.  
Success #stdin #stdout 1.45s 300376KB
stdin
Standard input is empty
stdout
Start
Po zablokowaniu: 472
Przed odblokowaniem: 572
Stop
1058