From 970c3098fd3be8582f52afecea5aaca1d57b521b Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Fri, 7 Feb 2020 11:41:54 +0100
Subject: [PATCH] Added Hack to fix bug in getEntryTrainingVectors

---
 .../compression/VQImageCompressor.java          |  1 -
 .../quantization/vector/LBGVectorQuantizer.java | 17 +++++++++++++++--
 2 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java
index 33cadff..695cd16 100644
--- a/src/main/java/azgracompress/compression/VQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageCompressor.java
@@ -131,7 +131,6 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
             }
 
             final int[][] planeVectors = plane.toQuantizationVectors(options.getVectorDimension());
-            Log("PlaneVectorCount: %d", planeVectors.length);
 
             if (!hasGeneralQuantizer) {
                 Log(String.format("Training vector quantizer from plane %d.", planeIndex));
diff --git a/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java b/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
index 9d7e12e..70cb909 100644
--- a/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
+++ b/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
@@ -693,14 +693,27 @@ public class LBGVectorQuantizer {
      * @return Array of training vectors.
      */
     private TrainingVector[] getEntryTrainingVectors(final int entryIndex, final int vectorCount) {
-        TrainingVector[] vectors = new TrainingVector[vectorCount];
+
         int index = 0;
+
+        //        TrainingVector[] vectors = new TrainingVector[vectorCount];
+        int count = 0;
+        for (final TrainingVector trainingVector : trainingVectors) {
+            if (trainingVector.getEntryIndex() == entryIndex) {
+                ++count;
+            }
+        }
+        TrainingVector[] vectors = new TrainingVector[count];
+//        if (count > vectorCount) {
+//            System.err.println(String.format(
+//                    "WARNING: got more training vectors than vectorCount! DIFF: %d",
+//                    count - vectorCount));
+//        }
         for (final TrainingVector trainingVector : trainingVectors) {
             if (trainingVector.getEntryIndex() == entryIndex) {
                 vectors[index++] = trainingVector;
             }
         }
-        assert (index == vectorCount);
         return vectors;
     }
 
-- 
GitLab