无法将图像转换为二进制格式以将其存储到文本文件中

时间:2013-12-30 09:28:31

标签: c# winforms filestream

我正在尝试使用FileStream对象以及File.WriteAllBytes将图像转换为二进制格式,但文本文件为空。附上下面的代码。

string fname,sfname; FileStream fsrw; byte[] bytearray;
    private void Form1_Load(object sender, EventArgs e)
    {

    }

    private void btnbrowse_Click(object sender, EventArgs e)
    {
        openFileDialog1.ShowDialog();
        fname = openFileDialog1.FileName;
        pictureBox1.ImageLocation = fname;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        openFileDialog1.ShowDialog();
        sfname = openFileDialog1.FileName;
        fsrw = new FileStream(sfname, FileMode.Open);
        bytearray = new Byte[fsrw.Length];
        fsrw.Read(bytearray, 0, Convert.ToInt32(fsrw.Length));
        MessageBox.Show("success");
        File.write
    }

当我放置一个断点并检查执行时,fsrw中包含该文件,当我将鼠标悬停在bytearray上时,它会提供byte[300127]及其全部为零的数组。

2 个答案:

答案 0 :(得分:1)

执行以下行时,您不是在阅读图像项目:

fsrw.Read(bytearray, 0, Convert.ToInt32(fsrw.Length));

事实上,你从未设置过bytearray,因此它的值为0。 fsrw 是您的输出流,而不是您的输入。

如果我理解你的代码,你的图像文件(输入)位于 fname ,所以你应该这样做:

private void button1_Click(object sender, EventArgs e)
{
    // Select the output file
    openFileDialog1.ShowDialog();
    sfname = openFileDialog1.FileName;

    // Create an output stream with this file
    fsrw = new FileStream(sfname, FileMode.Open);

    // Read your image
    bytearray = File.ReadAllBytes(fname);

    // Write the array to the outputStream
    fsrw.Write(bytearray, 0, bytearray.Length);
    fsrw.Close();

    MessageBox.Show("success");
}

如果您需要将图片保存到新文件中,只需更改此方法(使用位置设置sfname字符串)并更改新new FileStream(sfname, FileMode.Open);

中的FileStream(sfname, FileMode.Create);

答案 1 :(得分:0)

嗨,请使用它,这对我有用

    var sfname = openFileDialog1.FileName;

    FileStream stream = new FileStream(sfname, FileMode.Open, FileAccess.Read);

    BinaryReader br = new BinaryReader(stream );

    byte[] image = br.ReadBytes((int)stream .Length);

    br.Close();

    stream .Close();