Добавил вторую главу занимательного программирования
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
|
||||
|
||||
sourceSets.main.java.srcDirs = [ "src/" ]
|
||||
|
||||
eclipse.project.name = appName + "-core"
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user