docs: private void horizontallyFromSrcToWork(BufferedImage srcImg, byte[][] workPixels, int start, int delta) {
      if (nrChannels == 1) {
        horizontallyFromSrcToWorkGray(srcImg, workPixels, start, delta);
        return;
      }
      final
      int[]
        tempPixels =
        new int[srcWidth];   // Used if we work on int based bitmaps, later used to keep channel values
      final byte[] srcPixels = new byte[srcWidth * nrChannels]; // create reusable row to minimize memory overhead
      final boolean useChannel3 = nrChannels > 3;
  
      for (int k = start; k < srcHeight; k = k + delta) {
        ImageUtils.getPixelsBGR(srcImg, k, srcWidth, srcPixels, tempPixels);
  
        for (int i = dstWidth - 1; i >= 0; i--) {
          int sampleLocation = i * nrChannels;
          final int max = horizontalSubsamplingData.arrN[i];
  
          float sample0 = 0.0f;
          float sample1 = 0.0f;
          float sample2 = 0.0f;
          float sample3 = 0.0f;
          int index = i * horizontalSubsamplingData.numContributors;
          for (int j = max - 1; j >= 0; j--) {
            float arrWeight = horizontalSubsamplingData.arrWeight[index];
            int pixelIndex = horizontalSubsamplingData.arrPixel[index] * nrChannels;
  
            sample0 += (srcPixels[pixelIndex] & 0xff) * arrWeight;
            sample1 += (srcPixels[pixelIndex + 1] & 0xff) * arrWeight;
            sample2 += (srcPixels[pixelIndex + 2] & 0xff) * arrWeight;
            if (useChannel3) {
              sample3 += (srcPixels[pixelIndex + 3] & 0xff) * arrWeight;
            }
            index++;
          }
  
          workPixels[k][sampleLocation] = toByte(sample0);
          workPixels[k][sampleLocation + 1] = toByte(sample1);
          workPixels[k][sampleLocation + 2] = toByte(sample2);
          if (useChannel3) {
            workPixels[k][sampleLocation + 3] = toByte(sample3);
          }
        }
      }
    }