PDA

View Full Version : سوال: روش ذخیره تصویر موجود در Picture Box در هارد



mjfakhr
یک شنبه 03 خرداد 1388, 13:58 عصر
سلام

من می خوام تصویر موجود در Picture box روی فرم برنامه رو در یکی از درایوهای سیستم ذخیره کنم و از این دستور استفاده کردم : ("picturebox1.Image.Save("C:\Temp.jpg
ولی خطایی با متن زیر دریافت می کنم : +generic error occurred in GDI A
لطفا راهنمایی کنید باید چکار کنم

ali_md110
یک شنبه 03 خرداد 1388, 14:23 عصر
برو به این تاپیک
http://barnamenevis.org/forum/showthread.php?t=127548

mjfakhr
یک شنبه 03 خرداد 1388, 14:47 عصر
آقا ali_md110 سلام
از راهنمایی شما ممنون . در این تاپیک شما روش کپی گرفتن از یک فایل رو توضیح دادید .
ولی مشکل من اینکه که می خوام تصویر موجود در کنترل Picture box رو در یک محل از هارد ذخیره کنم و در هنگام ذخیره سازی هیچ فایلی موجود نیست که از او کپی بگیرم .
در واقع من تصویر رو از داخل بانک داده بازیابی می کنم و حالا می خوام به کاربر اجازه ذخیره اون رو در هارد بدم .
منتظر پاسخ شما هستم .

ali_md110
دوشنبه 04 خرداد 1388, 01:50 صبح
فکر کنم کار شما رو راه بندازه

Dim openIMG As New SaveFileDialog()
Dim Path As String
Try
openIMG.Filter = "All Files|*.*|Bitmaps|*.bmp|GIFs|*.gif|JPEGs|*.jpg"
openIMG.ShowDialog()
Path = openIMG.FileName
If Path <> "" Then
PictureBox1.Image.Save(Path & ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg)
End If

Catch ex As Exception
End Try

mjfakhr
دوشنبه 04 خرداد 1388, 19:50 عصر
آقای ali_md110 سلام
با تشکر از اینکه پاسخ این سوال رو پیگیری می کنید .
من امتحان کردم وقتی کنترل Picture رو با دستور زیر مقدار دهی می کنیم درست کار می کنه :

PicStu.Image = Image.FromFile(OpenFileD.FileName)
e

ولی من مقدار تصویر رو از داخل بانک پر می کنم و با دستور زیر این کار رو می کنم :

Dim arrImage() As Byte = CType(dvStu.Item(intPos).Item("StuImg"), Byte())
Dim Ms As New MemoryStream(arrImage)
PicStu.Image = Image.FromStream(Ms)
Ms.Close



حالا بعد از نمایش تصویر موجود در بانک اگر خواسته باشم تصویر موجود در کنترل Picture رو ذخیره کنم با خطای +A generic error occurred in GDI مواجه می شم ، البته در محل آدرس داده شده یک فایل با حجم صفر کیلو ایجاد می شه .
در ضمن من برای امتحان ، مقدار Image کنترل Picture رو در یک متغییر از نوع Image هم ریختم ولی باز هم همین خطا رو می ده .
یکی از دوستان گفته بود از دستور : ( )GC.Collect قبل از خط مربوط به دستور ذخیره سازی استفاده کنم که اون هم تاثیری نداشت .

ali_md110
دوشنبه 04 خرداد 1388, 23:49 عصر
چرا کنترل picturebox رو به جدولتون بایند نمیکنید
اگر بایند هم نمیکنید
کد زیر تصویر رو ار یک دیتاتیبل گرفته و اولین سطر با ایندکس صفر رو توی picturebox نشون میده هیچ مشکلی هم نداره بعد اون کد قبلی که براتون فرستادم رو اجرا کنید تصویر واقعی با حجم اصلی زخیره میشه


Dim arrPicture() As Byte = CType(mytbl.Rows(0)("Pic"), Byte())
Dim ms As New MemoryStream(arrPicture)
With PictureBox1
.Image = Image.FromStream(ms)
.SizeMode = PictureBoxSizeMode.StretchImage
.BorderStyle = BorderStyle.Fixed3D
End With
ms.Close()
Return True

mjfakhr
سه شنبه 05 خرداد 1388, 13:18 عصر
سلام
ولی من که بعد از دستور بالا دستور ذخیره سازی تصویر رو قرار می دم با همون خطای GDI مواجه می شوم
در سایت مایکروسافت گفته ممکن که فایل نافص یا خراب باشه یا GDI نمی تونه اون قالب از تصویر را شناسایی کنه . ( آدرس : http://support.microsoft.com/kb/810109 )
در حالی که من تصویر را بعد از بازیابی از بانک در کنترل picture می بینم و به ظاهر مشکلی وجود نداره .