Skip to content
Snippets Groups Projects
Commit db9a49e7 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Skip copy to chunks in VQ reconstrucion.

parent a965829e
No related branches found
No related tags found
No related merge requests found
......@@ -53,10 +53,7 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
Chunk2D reconstructedChunk = new Chunk2D(new V2i(imageDims.getX(), imageDims.getY()), new V2l(0, 0));
if (qVector.getY() > 1) {
Chunk2D[] chunks = reconstructedChunk.divideIntoChunks(qVector);
Chunk2D.updateChunkData(chunks, vectors);
reconstructedChunk.reconstructFromChunks(chunks);
reconstructedChunk.reconstructFrom2DVectors(vectors, qVector);
} else {
// 1D vector
reconstructedChunk.reconstructFromVectors(vectors);
......
......@@ -108,6 +108,24 @@ public class Chunk2D {
return vectors;
}
public void reconstructFrom2DVectors(final int[][] vectors, final V2i qVectorDims) {
final int xSize = dims.getX();
final int ySize = dims.getY();
final int chunkXSize = qVectorDims.getX();
final int chunkYSize = qVectorDims.getY();
int vecIndex = 0;
for (int chunkYOffset = 0; chunkYOffset < ySize; chunkYOffset += chunkYSize) {
for (int chunkXOffset = 0; chunkXOffset < xSize; chunkXOffset += chunkXSize) {
copyDataFromVector(vectors[vecIndex++], qVectorDims, chunkXOffset, chunkYOffset);
}
}
assert (vecIndex == vectors.length);
}
private int calculateRequiredChunkCountPerPlane(final V2i chunkDims) {
return calculateRequiredChunkCountPerPlane(dims, chunkDims);
}
......@@ -188,6 +206,26 @@ public class Chunk2D {
}
}
private void copyDataFromVector(int[] vector,
final V2i qVectorDims,
final int chunkXOffset,
final int chunkYOffset) {
final int qVecYSize = qVectorDims.getY();
final int qVecXSize = qVectorDims.getX();
int dstX, dstY;
for (int chunkY = 0; chunkY < qVecYSize; chunkY++) {
dstY = chunkYOffset + chunkY;
for (int chunkX = 0; chunkX < qVecXSize; chunkX++) {
dstX = chunkXOffset + chunkX;
if (!(dstX >= dims.getX() || dstY >= dims.getY())) {
setValueAt(dstX, dstY, vector[index(chunkX, chunkY, qVectorDims)]);
}
}
}
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Chunk2D) {
......@@ -291,4 +329,6 @@ public class Chunk2D {
chunks[i].updateData(newData[i]);
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment