gpt4 book ai didi

c# - 将 1 位图像转换为 8 位图像

转载 作者:行者123 更新时间:2023-11-30 21:23:47 25 4
gpt4 key购买 nike

如何使用 C# 将 1 位图像转换为 8 位图像?应该使用什么颜色矩阵?你能提供 sample 或链接吗?

最佳答案

免责声明:我不懂 C#,但我在 C/C++ 上做了太多图像处理,所以我不能继续回答 - 我会用 C 回答,因为我认为 C# 有相似的语法。

1 位(两种颜色)和 8 位(256 色)图像都有一个调色板。但是将 1 位转换为 8 位转换很容易 - 因为不涉及量化,只是上采样。

首先您需要选择(或导入)1 位图像调色板的两种颜色。如果你没有,我建议使用黑色 (0x000000FF) 和白色 (0xFFFFFFFF) 以清晰起见(注意:两种颜色都是 RGBA,我认为 Windows 使用 ABGR)。这将是您的“调色板”。

然后将每种颜色映射到调色板 - 输入图像将具有 width * height/8 字节。每个字节代表八个像素。因为我不知道你在 bittwiddling 方面的专业知识(即我不想让你感到困惑,我不想让你盲目地复制和粘贴你在互联网上获得的代码),我会保留这个答案简单。

    // Insert your image's attributes here
int w = image.width;
int h = image.height;
// Data of the image
u8* data = image.data;

/*
* Here, you should allocate (w * h) bytes of data.
* I'm sure C# has ByteArray or something similar...
* I'll call it output in my code.
*/

u8* output = new u8[w * h];
u8* walker = output;

// Loop across each byte (8 pixels)
for(int i=0; i<w*h/8; ++i) {
// Loop across each pixel
for(int b=(1<<7); b>0; b>>=1) {
// Expand pixel data to output
*walker++ = !!(data[i] & b);
}
}

希望对您有所帮助!

关于c# - 将 1 位图像转换为 8 位图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1545426/

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