fork download
  1. import java.awt.image.BufferedImage;
  2. import java.awt.image.DataBufferByte;
  3. import java.io.File;
  4. import java.time.Duration;
  5. import java.time.Instant;
  6. import javax.imageio.ImageIO;
  7.  
  8. class Ideone
  9. {
  10. public static byte IntToByte(int Val)
  11. {
  12. if (Val > 127)
  13. {
  14. Val = Val - 256;
  15. }
  16. return (byte)Val;
  17. }
  18.  
  19. public static void main(String[] args) throws java.lang.Exception
  20. {
  21. int BmpW = 30 * 256;
  22. int BmpH = 20 * 256;
  23. BufferedImage TestBmp = new BufferedImage(BmpW, BmpH, BufferedImage.TYPE_3BYTE_BGR);
  24.  
  25. Instant SW = Instant.now();
  26.  
  27. System.out.println("Start");
  28.  
  29. byte[] TestBmp__ = ((DataBufferByte)TestBmp.getRaster().getDataBuffer()).getData();
  30. int TestBmp__Stride = BmpW * 3;
  31. int Ptr = 0;
  32.  
  33. for (int YY = 0; YY < 10; YY++)
  34. {
  35. for (int XX = 0; XX < 10; XX++)
  36. {
  37. int PtrOffset = (TestBmp__Stride * 512 * YY) + (768 * 3 * XX);
  38.  
  39. Ptr = PtrOffset;
  40. for (int Y = 0; Y < 256; Y++)
  41. {
  42. for (int X = 0; X < 256; X++)
  43. {
  44. TestBmp__[Ptr + 0] = IntToByte(0);
  45. TestBmp__[Ptr + 1] = IntToByte(Y);
  46. TestBmp__[Ptr + 2] = IntToByte(X);
  47. Ptr += 3;
  48. }
  49. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  50. }
  51.  
  52. Ptr = PtrOffset + (3 * 256);
  53. for (int Y = 0; Y < 256; Y++)
  54. {
  55. for (int X = 0; X < 256; X++)
  56. {
  57. TestBmp__[Ptr + 0] = IntToByte(Y);
  58. TestBmp__[Ptr + 1] = IntToByte(X);
  59. TestBmp__[Ptr + 2] = IntToByte(0);
  60. Ptr += 3;
  61. }
  62. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  63. }
  64.  
  65. Ptr = PtrOffset + (3 * 512);
  66. for (int Y = 0; Y < 256; Y++)
  67. {
  68. for (int X = 0; X < 256; X++)
  69. {
  70. TestBmp__[Ptr + 0] = IntToByte(X);
  71. TestBmp__[Ptr + 1] = IntToByte(0);
  72. TestBmp__[Ptr + 2] = IntToByte(Y);
  73. Ptr += 3;
  74. }
  75. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  76. }
  77.  
  78. Ptr = PtrOffset + (TestBmp__Stride * 256);
  79. for (int Y = 0; Y < 256; Y++)
  80. {
  81. for (int X = 0; X < 256; X++)
  82. {
  83. TestBmp__[Ptr + 0] = IntToByte(255);
  84. TestBmp__[Ptr + 1] = IntToByte(Y);
  85. TestBmp__[Ptr + 2] = IntToByte(X);
  86. Ptr += 3;
  87. }
  88. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  89. }
  90.  
  91. Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 256);
  92. for (int Y = 0; Y < 256; Y++)
  93. {
  94. for (int X = 0; X < 256; X++)
  95. {
  96. TestBmp__[Ptr + 0] = IntToByte(Y);
  97. TestBmp__[Ptr + 1] = IntToByte(X);
  98. TestBmp__[Ptr + 2] = IntToByte(255);
  99. Ptr += 3;
  100. }
  101. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  102. }
  103.  
  104. Ptr = PtrOffset + (TestBmp__Stride * 256) + (3 * 512);
  105. for (int Y = 0; Y < 256; Y++)
  106. {
  107. for (int X = 0; X < 256; X++)
  108. {
  109. TestBmp__[Ptr + 0] = IntToByte(X);
  110. TestBmp__[Ptr + 1] = IntToByte(255);
  111. TestBmp__[Ptr + 2] = IntToByte(Y);
  112. Ptr += 3;
  113. }
  114. Ptr = Ptr + TestBmp__Stride - (3 * 256);
  115. }
  116.  
  117. }
  118. }
  119.  
  120. System.out.println("Stop ");
  121. System.out.println(Duration.between(SW, Instant.now()).toMillis());
  122.  
  123. try
  124. {
  125. ImageIO.write(TestBmp, "png", new File("/home/xxx/TestJava.png"));
  126. }
  127. catch (Exception E)
  128. {
  129. }
  130. }
  131. }
Success #stdin #stdout #stderr 0.43s 175632KB
stdin
Standard input is empty
stdout
Start
Stop 
140
stderr
java.io.FileNotFoundException: /home/xxx/TestJava.png (No such file or directory)
	at java.base/java.io.RandomAccessFile.open0(Native Method)
	at java.base/java.io.RandomAccessFile.open(RandomAccessFile.java:347)
	at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:261)
	at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:216)
	at java.desktop/javax.imageio.stream.FileImageOutputStream.<init>(FileImageOutputStream.java:69)
	at java.desktop/com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(FileImageOutputStreamSpi.java:55)
	at java.desktop/javax.imageio.ImageIO.createImageOutputStream(ImageIO.java:419)
	at java.desktop/javax.imageio.ImageIO.write(ImageIO.java:1549)
	at Ideone.main(Main.java:125)