Wednesday, May 9, 2012

การจัดการ Image โดยใช้ MemoryStream ใน C#

การแสดงภาพจากตอนที่แล้วจะเห็นว่าต้องเขียนไฟล์ลงบน Disk Drive ซึ่งบางครั้งมันจะติดเรื่อง Permission ทำให้ไม่สามารถทำงานต่อได้ผมได้หาวิธีแก้ไขโดยการใช้ MemoryStream เข้ามาแทนในการรับภาพมาแสดง โค้ดก็สั้นแล้วง่ายกว่าลองเอาไปปรับใช้ดูนะครับ
เริ่มจากการ using System.IO เข้ามาก่อน
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
using System.IO;
.
.
.
private void LoadImage(stirng mid)
{
var menulist = from m in db.Select()
where m.FoodtypeID == CurrentType
&& m.ID == mid
select m;
if (menulist.Count() > 0)
{
foreach (Menus m in menulist)
{
current_rs = m;
}
label1.Text = current_rs.Name + " Price : " +  String.Format("{0:N2}",current_rs.Price) + " Baht";
}
try
{
if (current_rs.ImageFile != null)
{
MemoryStream ms = new MemoryStream(current_rs.ImageFile);
pictureBox1.Image = Image.FromStream(ms);
ms.Dispose();
}
else
{
pictureBox1.Image = null;
}
}
catch
{
pictureBox1.Image = null;
}
}
</div>
ส่วนกรณีที่ใช้ในการเปิดไฟล์ลงใน pictureBox ดังนี้
<div style="background-color: #eeeeee; color: 00000;">
void Button1Click(object sender, EventArgs e)
{
//dirtyForm = true;
string imageFilePath = string.Empty;
OpenFileDialog OpenFileDialog1 = new OpenFileDialog();
OpenFileDialog1.Title = "Open Image File";
OpenFileDialog1.Filter = "JPEG Documents (*.jpg)|*.jpg|Gif Files|*.gif";
if (OpenFileDialog1.ShowDialog() ==
System.Windows.Forms.DialogResult.Cancel)
{
return;
}
imageFilePath = OpenFileDialog1.FileName;
if (String.IsNullOrEmpty(imageFilePath))
{
return;
}
if (System.IO.File.Exists(imageFilePath) == false)
{
return;
}
byte[] bArrImage = new byte[0];
try
{
// convert Image to byte array and save in
System.IO.FileStream fsImage = null;
fsImage = System.IO.File.Open(imageFilePath, FileMode.Open,
FileAccess.Read);
bArrImage = new byte[fsImage.Length];
fsImage.Read(bArrImage, 0, (int)fsImage.Length);
fsImage.Close();
current_rs.PlanBaan1 = bArrImage;
textBox4.Text = imageFilePath;
MemoryStream ms = new MemoryStream(bArrImage);
pictureBox1.Image = Image.FromStream(ms);
ms.Dispose();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message, "Error Storing Image");
}
}
ส่วนในการบันทึกก็ทำแบบบทความก่อนหน้าที่สามารถบันลึกจาก Picture Box ลงไปใน Database ได้เลย

No comments:

Post a Comment