diff --git a/src/main/java/azgracompress/io/loader/BasicLoader.java b/src/main/java/azgracompress/io/loader/BasicLoader.java index 6f7f6c224c80647476f6c342e13193e20e2cfb12..51d3cd9da16f2b10a23743551833d01b4767659b 100644 --- a/src/main/java/azgracompress/io/loader/BasicLoader.java +++ b/src/main/java/azgracompress/io/loader/BasicLoader.java @@ -135,27 +135,18 @@ public abstract class BasicLoader { return blocks; } - private void loadBlock(final int[] block, final int planeIndex, final int blockXOffset, final int blockYOffset, final V2i blockDim) { int srcX, srcY; for (int y = 0; y < blockDim.getY(); y++) { srcY = blockYOffset + y; - // Row overflow if (srcY >= dims.getY()) { - - if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) + if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) { break; - - if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { - final int srcRow = dims.getY() - 1; - final int dstOffset = y * blockDim.getX(); - duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset); - continue; + } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { + srcY = dims.getY() - 1; } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { - final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); - final int dstOffset = y * blockDim.getX(); - duplicateDataFromSrcRow(block, planeIndex, blockXOffset, blockDim, srcRow, dstOffset); + srcY = dims.getY() - ((srcY - dims.getY()) + 1); } } @@ -164,17 +155,12 @@ public abstract class BasicLoader { // Column overflow. if (srcX >= dims.getX()) { - - if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) + if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) { break; - if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { - block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(dims.getX() - 1, srcY, dims.getX())); - continue; + } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { + srcX = dims.getX() - 1; } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { - - block[Block.index(x, y, blockDim.getX())] = - valueAt(planeIndex, Block.index(dims.getX() - ((srcX - dims.getX()) + 1), srcY, dims.getX())); - continue; + srcX = dims.getX() - ((srcX - dims.getX()) + 1); } } block[Block.index(x, y, blockDim.getX())] = valueAt(planeIndex, Block.index(srcX, srcY, dims.getX())); @@ -182,35 +168,6 @@ public abstract class BasicLoader { } } - private void duplicateDataFromSrcRow(final int[] block, - final int planeIndex, - final int blockXOffset, - final V2i blockDim, - final int srcRow, - final int dstOffset) { - int srcX; - for (int x = 0; x < blockDim.getX(); x++) { - srcX = (blockXOffset + x); - if (srcX >= dims.getX()) - srcX = dims.getX() - 1; - block[dstOffset + x] = valueAt(planeIndex, Block.index(srcX, srcRow, dims.getX())); - } - } - - private void duplicateDataFromSrcRow(final int[] block, - final int[] planeData, - final int blockXOffset, - final V2i blockDim, - final int srcRow, - final int dstOffset) { - int srcX; - for (int x = 0; x < blockDim.getX(); x++) { - srcX = (blockXOffset + x); - if (srcX >= dims.getX()) - srcX = dims.getX() - 1; - block[dstOffset + x] = planeData[Block.index(srcX, srcRow, dims.getX())]; - } - } private void loadBlock(final int[] block, final int[] planeData, final int blockXOffset, final int blockYOffset, final V2i blockDim) { int srcX, srcY; @@ -218,36 +175,24 @@ public abstract class BasicLoader { srcY = blockYOffset + y; // Row overflow if (srcY >= dims.getY()) { - - if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) + if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) { break; - - if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { - final int srcRow = dims.getY() - 1; - final int dstOffset = y * blockDim.getX(); - duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset); - continue; + } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { + srcY = dims.getY() - 1; } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { - final int srcRow = dims.getY() - ((srcY - dims.getY()) + 1); - final int dstOffset = y * blockDim.getX(); - duplicateDataFromSrcRow(block, planeData, blockXOffset, blockDim, srcRow, dstOffset); + srcY = dims.getY() - ((srcY - dims.getY()) + 1); } } for (int x = 0; x < blockDim.getX(); x++) { srcX = blockXOffset + x; // Column overflow. if (srcX >= dims.getX()) { - - if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) + if (wrappingStrategy == DataWrappingStrategy.LeaveBlank) { break; - if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { - block[Block.index(x, y, blockDim.getX())] = planeData[Block.index(dims.getX() - 1, srcY, dims.getX())]; - continue; + } else if (wrappingStrategy == DataWrappingStrategy.ClampToEdge) { + srcX = dims.getX() - 1; } else if (wrappingStrategy == DataWrappingStrategy.MirroredRepeat) { - - block[Block.index(x, y, blockDim.getX())] = - planeData[Block.index(dims.getX() - ((srcX - dims.getX()) + 1), srcY, dims.getX())]; - continue; + srcX = dims.getX() - ((srcX - dims.getX()) + 1); } }