这是我的代码,它的ArrayList为8*8块的图像(Bmp),它是不工作的。这里的逻辑有什么缺陷?“行”是图像的行数。我在做我的视频隐藏项目。
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;
}
}发布于 2013-10-19 11:01:32
逻辑中的缺陷是,您已经获得了一个imageBlock,并且在调用ForwardDCT(imageBlock)之前覆盖了其中的数据几次。
您应该更改循环结构,使其进入网格步骤8x8,然后再有两个循环将网格的内容复制到imageBlock中,然后对其进行严格的调用ForwardDCT(imageBlock):
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));
}
}https://stackoverflow.com/questions/19465263
复制相似问题