将两张图片序列化保存成文本文件后,如何读取出来啊。

楚楚3107 2017-04-19 03:27:37
每次只能读取出来一张图片。请大神指教。说说思路,最好给代码,结帖速度快。
...全文
236 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 12 楼 xian_wwq 的回复:
直接Deserialize貌似不行,因为文件中数据是多张图片的。 建议把文件格式改为: 长度 pic1数据 长度 pic2数据 长度 pic3数据 这样需要在序列化的时候先把序列化后的长度保存在文件中,然后写入序列号的图片,以此类推; 读取的时候, 先读长度,再度各个文件,这样就能逐一读取出来了。 中间步骤可以借助MemoryStream暂存在内存中
不好意思,我点错回复按钮了。能给我个Demo么。
xian_wwq 2017-04-19
  • 打赏
  • 举报
回复
直接Deserialize貌似不行,因为文件中数据是多张图片的。 建议把文件格式改为: 长度 pic1数据 长度 pic2数据 长度 pic3数据 这样需要在序列化的时候先把序列化后的长度保存在文件中,然后写入序列号的图片,以此类推; 读取的时候, 先读长度,再度各个文件,这样就能逐一读取出来了。 中间步骤可以借助MemoryStream暂存在内存中
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
你难道是一个文件存了两张图片?你怎么存的?你确认你存的还能用图片查看器打开么……
这是我的代码 //序列化 private void Save_Click(object sender, EventArgs e) { IFormatter formater = new BinaryFormatter(); FileStream saveFile = new FileStream("file.dat",FileMode.Create); foreach (Image image in lst_image) { if (image is Image) { formater.Serialize(saveFile, image); } } saveFile.Close(); } //反序列化 private void open_Click(object sender, EventArgs e) { this.pictureBox = new System.Windows.Forms.PictureBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); this.panel1.Controls.Add(this.pictureBox); this.pictureBox.BackColor = System.Drawing.Color.White; this.pictureBox.Location = new System.Drawing.Point(0, 0); this.pictureBox.Name = "pictureBox" + var_picture; this.pictureBox.Size = new System.Drawing.Size(500, 500); this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.pictureBox.TabIndex = 0; this.pictureBox.TabStop = false; ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); this.pictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PictureBox_MouseDown); IFormatter formater = new BinaryFormatter(); FileStream openFile = new FileStream("file.dat",FileMode.Open); myImage = (Image)formater.Deserialize(openFile); openFile.Close(); pictureBox.Image = myImage; pictureBox.Width = myImage.Width; pictureBox.Height = myImage.Height; }
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
你难道是一个文件存了两张图片?你怎么存的?你确认你存的还能用图片查看器打开么……
点击序列化按钮保存,再打开只能打开一张图片
  • 打赏
  • 举报
回复
你难道是一个文件存了两张图片?你怎么存的?你确认你存的还能用图片查看器打开么……
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 7 楼 starfd 的回复:
using( FileStream openFile = new FileStream("file.dat",FileMode.Open))
{
////使用完就释放
}
谢谢,不能从一个文件中,把两张图片读取出来么。
  • 打赏
  • 举报
回复
using( FileStream openFile = new FileStream("file.dat",FileMode.Open))
{
////使用完就释放
}
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
重新new不就行了?using释放每个
这样就多个文件了吧。请问楼主using怎么释放。我是小白,请指教,结帖给您加分。
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 3 楼 diaodiaop 的回复:
重新定义几个变量 都变成formater 2 openFile2 myImage2不就行了? .....
我多定义几个文件的意思么,这个我想过了。因为再WINFORM中要插入很多图的。文件多不好,有生成一个文件再解析出来的方法么
  • 打赏
  • 举报
回复
重新new不就行了?using释放每个
by_封爱 版主 2017-04-19
  • 打赏
  • 举报
回复
重新定义几个变量 都变成formater 2 openFile2 myImage2不就行了? .....
楚楚3107 2017-04-19
  • 打赏
  • 举报
回复
引用 楼主 chulijun3107 的回复:
每次只能读取出来一张图片。请大神指教。说说思路,最好给代码,结帖速度快。
this.pictureBox = new System.Windows.Forms.PictureBox(); ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit(); this.panel1.Controls.Add(this.pictureBox); this.pictureBox.BackColor = System.Drawing.Color.White; this.pictureBox.Location = new System.Drawing.Point(0, 0); this.pictureBox.Name = "pictureBox" + var_picture; this.pictureBox.Size = new System.Drawing.Size(500, 500); this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage; this.pictureBox.TabIndex = 0; this.pictureBox.TabStop = false; ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit(); this.pictureBox.MouseDown += new System.Windows.Forms.MouseEventHandler(this.PictureBox_MouseDown); IFormatter formater = new BinaryFormatter(); FileStream openFile = new FileStream("file.dat",FileMode.Open); myImage = (Image)formater.Deserialize(openFile); openFile.Close(); pictureBox.Image = myImage; pictureBox.Width = myImage.Width; pictureBox.Height = myImage.Height; 这是我的读取代码。openFile 只能读取一次。无法再第二次读取了。
xuzuning 2017-04-19
  • 打赏
  • 举报
回复
第一张你是怎么取出来的? 取出第一张后,不就是第二张的开始吗

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧