【问题标题】:Divide 2d array into 8x8 blocks c#将二维数组划分为 8x8 块 c#
【发布时间】:2018-05-03 15:51:40
【问题描述】:

我一直在网上冲浪,但找不到任何好的答案。 所以我有这段代码,它应该将我的图像(它总是 512x512)裁剪成 4096 个 8x8 块。到目前为止一切都很好。

private List<int[,]> PictureDivide(Bitmap Image0)
{
    int[,] PartPic;
    List<int[,]> MacroBlocks = new List<int[,]>();
    HeightDivisions = Image0.Height / 8;
    WidthDivisions = Image0.Width / 8;           
    for (int a = 0; a < Image0.Height; a = a + 8)
    {
        for (int b = 0; b < Image0.Width; b = b + 8)
        {
            PartPic = new int[8, 8];
            for (int x = b, sx = 0; x < (b + 8); x++, sx++)
            {
                for (int y = a, sy = 0; y < (a + 8); y++, sy++)
                {
                    PartPic[sx, sy] = Image0.GetPixel(x, y).R;
                }

            }
            MacroBlocks.Add(PartPic);
        }
    }            
    return MacroBlocks;
}

但是当我只是重绘这张没有任何变化的图像时,它被破坏了,就像我错过了一些像素一样。我的代码有问题吗,或者如果你们有更好的解决方案,我将不胜感激。

编辑:添加示例:之前-之后。也许在我重建图像的方式上做错了什么?

【问题讨论】:

  • 为什么只存储像素的R 分量?
  • 我使用 YCbCr,得到灰色图片。所以因为所有的值都是一样的,所以没关系。
  • 你能发布一个“之前与之后”的例子吗?我看不到任何明显的东西。
  • 你确定问题出在这个方法上吗?可能是在显示方法中吗?
  • 看起来像倒置的xy 试试这个:PartPic[sy, sx] = Image0.GetPixel(x, y).R;

标签: c# bitmap crop


【解决方案1】:

看起来像倒置的 x 和 y 试试这个:PartPic[sy, sx] = Image0.GetPixel(x, y).R;

结束问题的答案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多