aboutsummaryrefslogtreecommitdiff
path: root/Занимательное программирование/2/6_pixel/core/src
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2025-12-15 00:36:33 +0100
committerEugen Wissner <belka@caraus.de>2025-12-15 00:36:33 +0100
commit2878f1e34c2c2e19d5b7f6fd368dbf9ec0c6277f (patch)
tree3964cbb7e85992f8f44840d5edacafadf805ba0f /Занимательное программирование/2/6_pixel/core/src
parentc1147629f7aae2ee90ccd7c9f1ccbf106361d486 (diff)
downloadbook-exercises-2878f1e34c2c2e19d5b7f6fd368dbf9ec0c6277f.tar.gz
Добавил вторую главу занимательного программирования
Diffstat (limited to 'Занимательное программирование/2/6_pixel/core/src')
-rw-r--r--Занимательное программирование/2/6_pixel/core/src/net/caraus/pixelimage/PixelImage.java90
1 files changed, 90 insertions, 0 deletions
diff --git a/Занимательное программирование/2/6_pixel/core/src/net/caraus/pixelimage/PixelImage.java b/Занимательное программирование/2/6_pixel/core/src/net/caraus/pixelimage/PixelImage.java
new file mode 100644
index 0000000..df49b3b
--- /dev/null
+++ b/Занимательное программирование/2/6_pixel/core/src/net/caraus/pixelimage/PixelImage.java
@@ -0,0 +1,90 @@
+package net.caraus.pixelimage;
+
+import java.util.random.RandomGenerator;
+
+import com.badlogic.gdx.ApplicationAdapter;
+import com.badlogic.gdx.Gdx;
+import com.badlogic.gdx.files.FileHandle;
+import com.badlogic.gdx.graphics.Pixmap;
+import com.badlogic.gdx.graphics.Texture;
+import com.badlogic.gdx.graphics.Pixmap.Format;
+import com.badlogic.gdx.graphics.g2d.SpriteBatch;
+import com.badlogic.gdx.math.RandomXS128;
+import com.badlogic.gdx.utils.ScreenUtils;
+
+public class PixelImage extends ApplicationAdapter {
+ private SpriteBatch batch;
+ private Texture img;
+ private Pixmap canvas;
+ private Pixmap etalon;
+ private int[][][] buffer;
+ private static final int X_OFFSET = 200;
+ private static final int Y_OFFSET = 100;
+ private int iterations = 0;
+
+ @Override
+ public void create () {
+ batch = new SpriteBatch();
+
+ FileHandle fileHandle = Gdx.files.internal("badlogic.jpg");
+ etalon = new Pixmap(fileHandle);
+
+ canvas = new Pixmap(etalon.getWidth() + X_OFFSET * 2, etalon.getHeight() + Y_OFFSET * 2, Format.RGB888);
+ buffer = new int[etalon.getWidth()][etalon.getHeight()][2];
+
+ for (int i = 0; i < buffer.length; ++i) {
+ for (int j = 0; j < buffer[i].length; ++j) {
+ buffer[i][j][0] = X_OFFSET + i;
+ buffer[i][j][1] = Y_OFFSET + j;
+ }
+ }
+ img = new Texture(canvas);
+ }
+
+ @Override
+ public void render () {
+ ScreenUtils.clear(1, 1, 1, 1);
+
+ canvas.setColor(1, 1, 1, 1);
+ canvas.fill();
+
+ // Draw the buffer.
+ for (int i = 0; i < buffer.length; ++i) {
+ for (int j = 0; j < buffer[i].length; ++j) {
+ int pixelColor = etalon.getPixel(i, j);
+
+ canvas.setColor(pixelColor);
+ canvas.drawPixel(buffer[i][j][0], buffer[i][j][1]);
+ }
+ }
+
+ if (iterations < 20) {
+ RandomGenerator randomGenerator = new RandomXS128();
+ // Change the pixel position.
+ for (int i = 0; i < buffer.length; ++i) {
+ for (int j = 0; j < buffer[i].length; ++j) {
+ int step = 5 * iterations + 1;
+ int moveX = randomGenerator.nextInt(step) - step / 2;
+ int moveY = randomGenerator.nextInt(step) - step / 2;
+
+ buffer[i][j][0] += moveX;
+ buffer[i][j][1] += moveY;
+ }
+ }
+ ++iterations;
+ }
+ img.draw(canvas, 0, 0);
+
+ batch.begin();
+ batch.draw(img, 0, 0);
+ batch.end();
+ }
+
+ @Override
+ public void dispose () {
+ batch.dispose();
+ img.dispose();
+ canvas.dispose();
+ etalon.dispose();
+ }
+}