为了账号安全,请及时绑定邮箱和手机立即绑定

SonarLint 警告:降低图像分块的认知复杂度(16 而不是 15)

SonarLint 警告:降低图像分块的认知复杂度(16 而不是 15)

犯罪嫌疑人X 2023-09-13 15:23:48
我编写了一个函数,其目的是获取从重新缩放的输入图像定义的子图像的集合(这些子图像称为“重新缩放的输入图像的重新缩放的块”)并将这些重新缩放的块重新组装成输出整个图像(其尺寸是输入图像的那些,重新缩放)。所有块都具有相同的尺寸。该函数定义如下。问题是 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);            }我浏览重新缩放的图像,用块的足够(x 轴或 y 轴)尺寸(所有块具有相同的尺寸)增加水平或垂直移位。相关循环是: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) {.
查看完整描述

1 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

你可以尝试重构你的方法,例如


int iForDraw = getDraw(reassembled_chunks_image_width, rescaled_chunk_width, i);

int jForDraw = getDraw(reassembledChunksImageHeight, rescaledChunkHeight, j);

添加一个小方法,例如 getDraw


private int getDraw(int reassembled_chunks_image_data, int rescaled_chunk_data, int index) {

    int result = index;

    int delta = reassembled_chunks_image_data - (index + rescaled_chunk_data);

    if (delta < 0) {

        result -= Math.abs(delta);

    }

    return result;

}


查看完整回答
反对 回复 2023-09-13
  • 1 回答
  • 0 关注
  • 67 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信