首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取图像的8*8块到arrayList

获取图像的8*8块到arrayList
EN

Stack Overflow用户
提问于 2013-10-19 10:55:10
回答 1查看 165关注 0票数 2

这是我的代码,它的ArrayList为8*8块的图像(Bmp),它是不工作的。这里的逻辑有什么缺陷?“行”是图像的行数。我在做我的视频隐藏项目。

代码语言:javascript
复制
        int x = 0;
        int colCount = 0;

        int yStart = 0;
        int yLimit = 8;

        for (x = 0;x < rows; x++)
        {
            while (yStart<yLimit)
            {
                imageBlock[x % 8, yStart % 8] = image_array[0].Data[x, yStart, 1];

                if (x % 8 == 7 && yStart % 8 == 7)
                {
                    blockList.Add(ForwardDCT(imageBlock));
                }

                yStart++;
            }

            if (x == rows - 1)
            { 
                x = 0;
                yLimit = yLimit + 8;
                //yStart = yStart + 8;
                colCount++;

                if (colCount == 100)
                {
                    break;
                }
            }

            if (yStart % 8 == 7)
            {
                yStart = yLimit - 8;
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-19 11:01:32

逻辑中的缺陷是,您已经获得了一个imageBlock,并且在调用ForwardDCT(imageBlock)之前覆盖了其中的数据几次。

您应该更改循环结构,使其进入网格步骤8x8,然后再有两个循环将网格的内容复制到imageBlock中,然后对其进行严格的调用ForwardDCT(imageBlock)

代码语言:javascript
复制
for (var blockRow = 0 ; blockRow < rows ; blockRow += 8) {
    for (var blockCol = 0 ; blockCol < yLimit ; blockCol += 8) {
        for (var r = 0 ; r != 8 ; r++) {
            for (var c = 0 ; c != 8 ; c++) {
                // Add a check to see that blockRow+r, blockCol+c
                // are inside the original image
                imageBlock[r][c] = image_array[0].Data[blockRow+r, blockCol+c, 1];
            }
        }
        blockList.Add(ForwardDCT(imageBlock));
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19465263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档