PDA

View Full Version : نحوه ذخیره عکس



oranoos
سه شنبه 24 اسفند 1389, 10:42 صبح
سلام
من یه برنامه می خوام که مسیر عکس رو از کاربر بگیره و بعد از چک کردن سایز و حجم عکس نام عکس را در بانک ذخیره کنه و خود عکس رو در پوشه ای که در Debug ساخته شده ذخیره کنه ،ولی نمی دونم باید چطور این برنامه رو بنویسم و یا از چه کامپوننتی استفاده کنم ؟لطفا مرا را راهنمایی کنید.در ضمن برنامه من با vb.net و تحت ویندوز
کمک فوری

bhasoft
شنبه 20 فروردین 1390, 17:37 عصر
دوست عزيزم منهم مثل شما ميخواستم اينكارو بكنم.ولي ديدم امنيت برنامم به كلي مياد پائين.چون همه عكسا قابل رويت هستش.
واسه همين تصميم گرفتم خود عكسارو درون پايگاه داده ذخيره كنم.يعني به صورت كد باينري.

من تو يه پست ديگه اينرو گزاشته بودم واسه شما هم ميزارم.اميدوارم بدرد بخوره.


با سلام خدمت دوستان عزيزم.دوستان خوبم من اين كدهارو براي ذخيره و بازيابي عكس توي پايگاه داده اكسس با وي بي دات نت نوشتم.البته با كمك دوست بسيار خوبم مبتكر كد عزيز.واقعا خيلي به دادم رسيد و ازش خيلي ممنونم.
خلاصه خدمتتون عرض كنم من اين كدهارو با مصيبت پيدا كردم و تبديلشون كردم.اميدوارم به دردتون بخوره.تست هم شده و كاملا دقيق كار ميكنه.اگه مورد پسند بود 2تا صلوات بفرستين.مرسي



در ابتدا مفروضات مسئله :
فرض می کنم در پایگاه داده اكسس دیتابیسی با نام School و جدولی به نام Student دارم که فیلد primary key این جدول با نام stcode و فیلدی که تصویر دانش اموز را نگه داری می کند از نوع image و با نام stimage
است و در این جدول دانش آموزی با کد 1 اطلاعات آن وارد شده است.

در ابتدا تابعی به صورت زیر تعریف می کنم :


اين تابع عكس گرفته شده توسط openfilefolder را به كد باينري تبديل ميكنه:

PrivateFunction ConvertImageToByte(ByVal ImageLocation AsString) AsByte()
Dim fs AsNew FileStream(ImageLocation, FileMode.Open, FileAccess.Read)
Dim br AsNew BinaryReader(fs)
Dim picture AsByte()
Dim fInfo AsNew FileInfo(ImageLocation)
Dim numBytes AsLong = fInfo.Length
picture = br.ReadBytes(CInt(numBytes))
Return picture
EndFunction

با كد هاي زير عكس گرفته شده توي پايگاه داده اكسس ذخيره ميشه.

Dim comsave AsNew OleDbCommand()
comsave.Connection = myconnection
comsave.CommandText = "Insert Into student Values (@stcode,@stname,@stimage)";
comsave.Parameters.AddWithValue("@stcode", int.Parse(txtstcode.Text));
comsave.Parameters.AddWithValue("@stname", txtstname.Text);
comsave.Parameters.AddWithValue("@stimage", ConvertImageToByte(openImage.FileName));
comsave.ExecuteNonQuery()

تابع تبديل كد به عدد:

Private Function ConvertByteToImage(ByVal ImageByte As Byte()) As Image
Dim ms As New MemoryStream(ImageByte)
Dim img As Image
img = Image.FromStream(ms)
Return img
End Function




این تابع کدهای باینری مربوط به عکس ذخیره شده را گرفته و با استفاده از کلاس MemoryStream آنرا به صورت بافر در می آورد و با استفاده از متد FromStream از کلاس Image بافر را به تصویر تبدیل می کنیم.



و حالا خواندن عکس از دیتابیس :

Dim ConnectionString AsString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath & "\image.mdb"
Dim myconnect AsNew OleDb.OleDbConnection(ConnectionString)
myconnect.Open()
Dim comsearch AsNew OleDbCommand()
comsearch.Connection = myconnect
comsearch.CommandText = "Select stname,stimage From student Where stcode=" & Integer.Parse(T1.Text)
Dim reader As OleDbDataReader = comsearch.ExecuteReader()
reader.Read()
T1.Text = reader.GetValue(0).ToString()
PBx.Image = ConvertByteToImage(DirectCast(reader.GetValue(1), Byte()))
myconnect.Close()



pic1 نام کنترل pictureBox برای نمایش تصویر است.



دستورات بالا را در رویداد کلیک یک button بنویسید.



نکته : قبل از نوشتن دستورات بالا فضای نامی System.IO ، System.Data.Sql و System.Data.SqlClient را به پروژه خود اضافه کنید.

Imports System.IO
Imports System.Globalization
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Data.OleDb