我是C#的新手,我正在尝试从原始二进制流生成图像。该文件是纯二进制文件,扩展名为.bin,编码为8 bpp 2-2-2-2格式;每个RGB颜色包含2位,不透明度包含2位。我还没有尝试过任何东西,因为我真的不知道从哪里开始;我已经搜索了之前发布的问题,但没有找到任何有用的信息。我的应用程序将接收一个串行流,我必须从文件生成一个800 x 600的图像,每个像素使用一个字节。任何想法至少会让我开始?
答案 0 :(得分:1)
我会从这样的事情开始。
public void ImageTest()
{
var bitmap = new Bitmap(800,600);
var stream = new BinaryReader(new FileStream("pathtofile",FileMode.Open));
byte currentbyte;
int x = 0;
int y = 0;
while((currentbyte = stream.ReadByte()) != EndOfImageMarker)
{
bitmap.SetPixel(x,y,DecodeByteToColor(currentbyte));
x++;
y++;
if (x == 799)//next line
{
x = 0;
}
if (y == 599)
{
break;
}
}
bitmap.Save("Path to new file...");
}
private Color DecodeByteToColor(byte currentbyte)
{
const int adjustment = 10;
var red = (currentbyte & 0x3) * adjustment;
var green = (currentbyte << 2 & 0x3) * adjustment;
var blue = (currentbyte << 4 & 0x3) * adjustment;
var alpha = (currentbyte << 6 & 0x3) * adjustment;
return Color.FromArgb(red, green, blue, alpha);
}
我做了一些移位工作已经有一段时间了,我可能会让操作员向后退出你需要的东西。目的是获取前两位,并将其移至接下来的两位。调整将确定一旦转换为全范围值,每个位获得多少颜色。