gpt4 book ai didi

c# - 垂直翻转字节数组中位图的算法

转载 作者:搜寻专家 更新时间:2023-11-01 07:37:15 24 4
gpt4 key购买 nike

我正在编写一个类,用于通过 Mono For Android 将位图打印到 Android 中的可移植蓝牙打印机。我的类用于从流中获取像素数据,以便可以以正确的格式将其发送到打印机。现在这个类很简单,它只读取高度、宽度和每个像素的位数。

使用它读取的偏移量并将像素数据返回给打印机。现在我只处理每像素 1 位的黑白图像。我使用的位图是 Windows 格式。

这是原图:

Original Image (Sent as Bitmap)

Result of printing and initial attempt at flip

这是打印的结果,第一张图片没有任何变形。而第二个是用下面的代码修改BitArray的结果:

        BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);

for (int i = 0, j = bits.Length - 1; i < bits.Length; i++, j--)
{
flippedBits[i] = bits[j];
}

我的问题是:

当我使用字节数组时,如何垂直翻转图像。我找不到执行此操作的算法,所有示例似乎都建议使用我无法使用的已建立图形库。

编辑:

我的位图保存在一个一维数组中,第一行字节,然后是第二行,第三行,等等。

最佳答案

你需要做这样的事情:

BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);

for (int i = 0; i < bits.Length; i += width) {
for (int j = 0, k = width - 1; j < width; ++j, --k) {
flippedBits[i + j] = bits[i + k];
}
}

如果你需要颠倒镜像,使用这个代码:

BitArray bits = new BitArray(returnBytes);
BitArray flippedBits = new BitArray(bits);

for (int i = 0, j = bits.Length - width; i < bits.Length; i += width, j -= width) {
for (int k = 0; k < width; ++k) {
flippedBits[i + k] = bits[j + k];
}
}

关于c# - 垂直翻转字节数组中位图的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9199866/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com