Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将2-2-2-2格式的原始二进制图像转换为C#格式的位图?_C#_Image_Binary - Fatal编程技术网

如何将2-2-2-2格式的原始二进制图像转换为C#格式的位图?

如何将2-2-2-2格式的原始二进制图像转换为C#格式的位图?,c#,image,binary,C#,Image,Binary,我是C#新手,我正在尝试从原始二进制流生成图像。该文件是一个纯二进制文件,扩展名为.bin,编码为8 bpp 2-2-2-2格式;每个RGB颜色包含2位,不透明度包含2位。我还没有尝试过任何东西,因为我真的不知道从哪里开始;我已经搜索了之前发布的问题,但没有找到任何有用的。我的应用程序将接收一个串行流,我必须从文件中生成一个800 x 600的图像,每个像素使用一个字节。有什么想法至少能让我开始吗?我会从这样的事情开始 public void ImageTest() { var bitm

我是C#新手,我正在尝试从原始二进制流生成图像。该文件是一个纯二进制文件,扩展名为.bin,编码为8 bpp 2-2-2-2格式;每个RGB颜色包含2位,不透明度包含2位。我还没有尝试过任何东西,因为我真的不知道从哪里开始;我已经搜索了之前发布的问题,但没有找到任何有用的。我的应用程序将接收一个串行流,我必须从文件中生成一个800 x 600的图像,每个像素使用一个字节。有什么想法至少能让我开始吗?

我会从这样的事情开始

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);
}
public void ImageTest()
{
var位图=新位图(800600);
var stream=newbinaryreader(newfilestream(“pathtofile”,FileMode.Open));
字节当前字节;
int x=0;
int y=0;
而((currentbyte=stream.ReadByte())!=EndOfImageMarker)
{
SetPixel(x,y,decodeBytocolor(currentbyte));
x++;
y++;
if(x==799)//下一行
{
x=0;
}
如果(y==599)
{
打破
}
}
保存(“新文件的路径…”);
}
专用颜色解码器ByTetoColor(字节currentbyte)
{
常数整定=10;
var red=(当前字节和0x3)*调整;

var green=(currentbyte)是否要显示图像或将其保存回光盘?如果要显示图像,是否使用WinForms或WPF?位向后移动,调整值应为0x01010101。否则,这应该可以工作(虽然速度很慢,
Bitmap.LockBits
比许多调用
Bitmap.SetPixel
的速度要快得多)。