如何将大小为 20x30 的 8 位位图数组缩减采样为 10x15

本文关键字:数组 位图 采样 10x15 小为 20x30 | 更新日期: 2023-09-27 17:56:55

如何对大小为 20x30 到 10x15 的 8 位位图数组进行下采样

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

这是1的原始数组,0字符"A"的表示

形式
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 

现在有人可以告诉如何在不丢失字符"A"的情况下将采样下采样到 10x15 数组吗?

如何将大小为 20x30 的 8 位位图数组缩减采样为 10x15

这完全取决于您希望如何对图像进行采样。对于您的示例,一个简单的采样是从 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;
    }
}
您可以使用

Matrix.Scale函数来实现此目的。

这是一个例子