Я написал функцию, цель которой состоит в том, чтобы взять набор подизображений, определенных из масштабированного входного изображения (эти подизображения называются «масштабированные фрагменты масштабированного входного изображения»), и повторно собрать эти масштабированные фрагменты в выходное целое изображение. (чьи размеры соответствуют исходному изображению, масштабируется). Все куски имеют одинаковые размеры.
Функция определена ниже. Проблема в том, что SonarLint предупреждает меня о том, что когнитивная сложность равна 16 вместо 15, и я не хочу изменять ограничение SonarLint по умолчанию. Что я могу сделать?
Ниже описана функция следующего кода:
final BufferedImage reassembleChunksInASingleImage(final int inputImageWidth, final int inputImageHeight, final int scalingCoefficient, final int chunkWidth, final int chunkHeight, final List<BufferedImage> theChunks) {
logger.log(Level.INFO, "Reassembling...");
final int reassembled_chunks_image_width = scalingCoefficient * inputImageWidth;
final int reassembledChunksImageHeight = scalingCoefficient * inputImageHeight;
final int rescaled_chunk_width = scalingCoefficient * chunkWidth;
final int rescaledChunkHeight = scalingCoefficient * chunkHeight;
final BufferedImage reassembledChunksImage = new BufferedImage(reassembled_chunks_image_width, reassembledChunksImageHeight, BufferedImage.TYPE_INT_RGB);
int indexOfTheChunkToUse = 0;
for(int i = 0; i < reassembled_chunks_image_width; i += rescaled_chunk_width) {
for(int j = 0; j < reassembledChunksImageHeight; j += rescaledChunkHeight) {
final BufferedImage chunkToUse = theChunks.get(indexOfTheChunkToUse);
int iForDraw = i;
int jForDraw = j;
final int deltaI = reassembled_chunks_image_width - (i + rescaled_chunk_width);
final int deltaJ = reassembledChunksImageHeight - (j + rescaledChunkHeight);
if(deltaI < 0) {
iForDraw -= Math.abs(deltaI);
}
if(deltaJ < 0) {
jForDraw -= Math.abs(deltaJ);
}
for(int x = 0; x < rescaled_chunk_width; x++) {
for(int y = 0; y < rescaledChunkHeight; y++) {
int colorToDraw = chunkToUse.getRGB(x, y);
reassembledChunksImage.setRGB(iForDraw + x, jForDraw + y, colorToDraw);
}
}
indexOfTheChunkToUse++;
}
}
logger.log(Level.INFO, "Reassembling done.");
return reassembledChunksImage;
}
Я перехожу по измененному изображению, увеличиваягоризонтальное или вертикальное смещение с адекватным (осевым или осевым) размером кусков (все куски имеют одинаковый размер). Соответствующие циклы: for(int i = 0; i < reassembled_chunks_image_width; i += rescaled_chunk_width) {for(int j = 0; j < reassembledChunksImageHeight; j += rescaledChunkHeight) {
Я установил цвет пикселя текущего измененного изображения равным цвету текущего чанка. Соответствующие циклы: for(int x = 0; x < rescaled_chunk_width; x++) {for(int y = 0; y < rescaledChunkHeight; y++) {
.
Если текущий фрагмент находится за пределами масштабированного изображения, я сдвигаю его влево или вверх, а затем рисую. Соответствующие элементы управления: if(deltaI < 0) {if(deltaJ < 0) {
.