我正在尝试使用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]
及其全部为零的数组。
答案 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();