From 4a16dbfc9fe20f25ad52afe355c8d64455e5f4ee Mon Sep 17 00:00:00 2001 From: DaniTheSkunk Date: Thu, 15 Sep 2022 23:11:35 +0200 Subject: [PATCH] added Image.drawImage --- com/danitheskunk/skunkworks/Image.java | 33 +++++++++++++++++++------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/com/danitheskunk/skunkworks/Image.java b/com/danitheskunk/skunkworks/Image.java index f3f32b4..37adc5b 100644 --- a/com/danitheskunk/skunkworks/Image.java +++ b/com/danitheskunk/skunkworks/Image.java @@ -43,18 +43,35 @@ public class Image { public Color getPixel(Vec2i pos) { int i = pos.getX() * 4 + pos.getY() * 4 * size.getX(); return new Color( - ((int)data[i + 0]) & 0xFF, - ((int)data[i + 1]) & 0xFF, - ((int)data[i + 2]) & 0xFF, - ((int)data[i + 3]) & 0xFF + ((int) data[i + 0]) & 0xFF, + ((int) data[i + 1]) & 0xFF, + ((int) data[i + 2]) & 0xFF, + ((int) data[i + 3]) & 0xFF ); } public void setPixel(Vec2i pos, Color col) { int i = pos.getX() * 4 + pos.getY() * 4 * size.getX(); - data[i + 0] = (byte)(col.r & 0xFF); - data[i + 1] = (byte)(col.g & 0xFF); - data[i + 2] = (byte)(col.b & 0xFF); - data[i + 3] = (byte)(col.a & 0xFF); + data[i + 0] = (byte) (col.r & 0xFF); + data[i + 1] = (byte) (col.g & 0xFF); + data[i + 2] = (byte) (col.b & 0xFF); + data[i + 3] = (byte) (col.a & 0xFF); + } + + public void drawImage(Image srcImage, Vec2i destPos) { + drawImage(srcImage, destPos, new Recti(Vec2i.ZERO, srcImage.getSize())); + } + + public void drawImage(Image srcImage, Vec2i destPos, Recti srcRect) { + //todo: check bounds + //todo: write in faster way than pixel stuff + for(int y = 0; y < srcRect.getHeight(); ++y) { + for(int x = 0; x < srcRect.getWidth(); ++x) { + var iterPos = new Vec2i(x, y); + var to = Vec2i.add(destPos, iterPos); + var from = Vec2i.add(srcRect.getPos(), iterPos); + setPixel(to, srcImage.getPixel(from)); + } + } } }