-2

我如何将大小为 20x30 的 8 位位图数组下采样到 10x15

original_bitmap_array[20][30]downsample_array[10][15]

这是原始数组,它是字符“A”的表示1形式0

00000000111100000000
00000001111100000000
00000001111100000000
00000001111110000000
00000011100110000000
00000011000110000000
00000011000111000000
00000011000011000000
00000111000011000000
00000110000011000000
00000110000011000000
00000110000011000000
00001110000001100000
00001110000001100000
00001100000001100000
00001100000000110000
00001100000000110000
00011111111111110000
00011111111111111000
00011111111111111000
00011111111111111000
00111111111111111000
00110000000000011000
00110000000000011100
01110000000000011100
01110000000000001100
01110000000000001110
01100000000000001110
11100000000000000110
11100000000000000111 

现在有人可以告诉如何下采样成 10x15 数组,而不会丢失 char 'A'?

4

2 回答 2

2

这完全取决于您要如何对图像进行采样。您的示例的一个简单采样是从 20x30 中获取每一秒像素并放入 10x15。

您可能想要扩展它并在 2x2 像素的横截面上采样并使用双线性插值。

因为我现在不知道您想如何对图像进行采样,所以我很难为您提供更多信息。

更新:

org_img[20][30]; --monochrome values
sampled_img[10][15];

for(int i=0; i < 10; i++)
{
    for(int j=0; j < 15; j++)
    {
        int average = org_img[2*i][2*j] + org_img[2*i+1][2*j]+ org_img[2*i][2*j+1] + org_img[2*i+1][2*j+1];
        average = average>>2; --integer division by 4.
        sampled_img[i][j] = average;
    }
}
于 2013-02-01T14:24:24.300 回答
1

您可以Matrix.Scale为此使用功能。

这是一个例子

于 2013-02-01T14:08:12.967 回答