我如何1位图像转换为使用C#的8位图像?应该使用什么颜色矩阵?你能提供样品或链接吗?转换1位图像到8位
2
A
回答
1
3
声明:我不知道C#,但我已经做了太多的C/C++图像处理,所以我不能通过回答 - 我会用C来回答,因为我认为C#有一个类似的语法。
两个1位(两种颜色)和8位(256色)图像具有的调色板。但是将1bit转换为8bit转换很容易 - 因为不涉及量化,只是上采样。
首先,你需要选择(或进口)的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);
}
}
希望有所帮助!
相关问题
- 1. 转换8位图像到4位图像
- 2. 24位到1位位图转换
- 3. 转换8位色的BMP图像到8位灰度BMP
- 4. 8位到16位转换
- 5. 1位位图数据如何转换为8位(24bpp)?
- 6. Android:将位图转换为单色位图(每像素1位)
- 7. 转换24位图像RGB到3位8色
- 8. 转换16位PCM到8位
- 9. 从8位转换为1个字节
- 10. 使用OpenCV将12位拜耳图像转换为8位RGB
- 11. 在OpenCV 2中将8位图像转换为32位
- 12. 将12位DICOM图像转换为8位jpeg
- 13. 将24位图像转换为8位单点触摸?
- 14. 将RGB图像转换为RGB 16位和8位
- 15. 转换32位rgb图像为8位rgb C++
- 16. UWP图像到位图转换
- 17. 转换位图图像到黑莓J2ME
- 18. 转换图像下载到位图
- 19. 将1bit位图转换为8位位图xamarin
- 20. C# - 如何将图像转换为8位彩色图像?
- 21. 在java中转换8位灰度RAW图像中的图像
- 22. 转换8位灰度级图像以7位灰度级图像
- 23. 如何在Java中将16位.tiff图像转换为8位.tiff图像?
- 24. 将8位二进制向量转换为1灰度像素
- 25. 在.Net 2.0中将8位灰度tiff图像转换为8位灰度jpg
- 26. 在Verilog中将ALU 1位转换为ALU 8位
- 27. 16位图像转换为32位
- 28. vb.net将32位位图转换为8位(256色)
- 29. 位图8位灰度图像在C
- 30. 将位图图像转换为字节数组(Windows Phone 8)