سلام دوستان
من آدرس یک عکس رو از طریق کادر OpenFileDialog بدست می آرم حالا میخوام این عکس با سایز جدید در مسیر root اصلی برنامه کپی بشه اگر لطف کنید و بنده رو راهنمایی کنید از شما ممنون می شم :11:
Printable View
سلام دوستان
من آدرس یک عکس رو از طریق کادر OpenFileDialog بدست می آرم حالا میخوام این عکس با سایز جدید در مسیر root اصلی برنامه کپی بشه اگر لطف کنید و بنده رو راهنمایی کنید از شما ممنون می شم :11:
سلام
آدرس عکس را که دارید، آدرس مسیر جاری برنامه هم در System.Windows.Forms.Application.StartupPath قرار دارد، پس دستور کپی چنین میشود
ولی برای تغییر سایز عکس باید از دستورات گرافیکی +GDI استفاده کنید.کد://C#.Net
string src = "C:\\file.jpg";
string filename = System.IO.Path.GetFileName(src);
string dest = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, filename);
System.IO.File.Copy(src, dest);
'VB.Net
Dim src As String = "C:\file.jpg"
Dim filename As String = System.IO.Path.GetFileName(src)
Dim dest As String = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, filename)
System.IO.File.Copy(src, dest)
مثلاً به جای دستور آخر دستور زیر را اجرا کنید.
کد://C#.Net2008
using (var bmp1 = System.Drawing.Image.FromFile(src))
{
//using (var bmp2 = new System.Drawing.Bitmap(bmp1, new System.Drawing.Size(100, 100)))
using (var bmp2 = bmp1.GetThumbnailImage(100, 100, null, IntPtr.Zero))
{
bmp2.Save(dest, bmp1.RawFormat);
}
}
'VB.Net2008
Using bmp1 = System.Drawing.Image.FromFile(src)
'Using bmp2 As New System.Drawing.Bitmap(bmp1, new System.Drawing.Size(100, 100))
Using bmp2 = bmp1.GetThumbnailImage(100, 100, Nothing, IntPtr.Zero)
bmp2.Save(dest, bmp1.RawFormat)
End Using
End Using
ببخشید ،
من یه سوال دارم .
چطور میتونم از یه عکسی ، از نقطه 0 و 0 به اندازه 100 پیکسل در 100 پیکسل رو جدا کنم و روی هارد ذخیره کنم ؟ (VB.NET)
( پیشاپیش ممنون)
سلام
1- دقت کنید، گرچه در کد فوق دو Rectangle با هم برابر هستند ولی ...کد:'VB.Net2005/2008
Using _
bmp1 = System.Drawing.Image.FromFile(src), _
bmp2 As New System.Drawing.Bitmap(100, 100), _
gdi As System.Drawing.Graphics = System.Drawing.Graphics.FromImage(bmp2)
gdi.DrawImage( _
bmp1, _
New System.Drawing.Rectangle(0, 0, 100, 100), _
New System.Drawing.Rectangle(0, 0, 100, 100), _
System.Drawing.GraphicsUnit.Pixel)
bmp2.Save(dest, bmp1.RawFormat)
End Using
اولی مختصات ترسیم روی مقصد (bmp2) را مشخص میکند و
دومی مختصات بخشی از تصویر که باید از منبع (bmp1) برداشته شود را مشخص میکند.
2- یادآوری میکنم که استفاده از Using به جای Dim باعث میشود شی در End Using نابود شود و منابع و حافظه تخصیص داده شده آزاد شود.
3- در ذخیره تصویر با متد Save میتوانید به جای فرمت اصلی bmp1 از انواع فرمتهای JPG و PNG و TIF و GIF و BMP و... استفاده کنید و در واقع میتوانید فرمت تصویری که باید ذخیره شود را هم همینجا عوض کنید، البته بدیهی است دستور فوق کاری به نام فایل ندارد و با کمی بی دقتی امکان دارد فایلی با فرمت png به پسوند jpg ذخیره شود! این وظیفه شما است که پسوند صحیح و مناسب را هم در متغییر dest قبل از ذخیره سازی اصلاح کنید.
سلام دوستان
جناب H2 عزیز من بوسیله کدی که شما زحمت کشیدید قرار دادین تونستم عکس هایی که توسط کادر OpenFileDialog انتخاب کردم رو تغییر اندازه بدم و در root برنامه قرار بدم حالا مشکل اینجاست که من بعد تبدیل و کپی عکس را در یک PictureBox نمایش می دم دفعه اول هیچ مشکلی نداره و برنامه درست کار می کنه ولی در دفعه بعد سیستم Error زیر را نمایش می دهد
کد:A generic error occurred in GDI+
سلام
این یک خطای کلی است و همینطوری نمیتوان گفت دلیل کجا است.
باید کدهای کامل بخشهای بارگذاری و نمایش و... را ببینم.
بفرمایید
البته هنگام لود فرم هم PictureBox یکبار با مقدار که در دیتابیس ذخیره شده پر می شودکد:OpenArm.Title = " "
OpenArm.Filter = "Image Files(*.BMP;*.JPG;*.GIF;*.PNG)|*.BMP;*.JPG;*.GIF;*.PNG"
OpenArm.ShowDialog()
Dim src AsString = OpenArm.FileName
dest = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath & "\Pic", "Arm.jpg")
If src <> ""Then
Using bmp1 = System.Drawing.Image.FromFile(src)
Using bmp2 = bmp1.GetThumbnailImage(70, 70, Nothing, IntPtr.Zero)
bmp2.Save(dest, bmp1.RawFormat)
EndUsing
EndUsing
EndIf
PictureBox1.Image = System.Drawing.Image.FromFile(dest)
سلام دوستان
جناب H2 آیا به مشکل بنده پی بردید من منتظر جواب شما هستم
سلام
در کد شما فقط دو مطلب قابل ذکر وجود داد.
اول آنکه دستور زیر کمی جالب نیست:
و این مناسب تر است:کد:dest = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath & "\Pic", "Arm.jpg")
دوم آنکه اگر منظورتان آن بوده که کل این دستورات را مجدد اجرا میکنید، احتمالاً مشکل از عدم آزاد سازی منابع و تصویر و فایل، شاید باشد.کد:dest = System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "Pic\Arm.jpg")
اول تصویری را که از فایل قبلی باز کرده و نمایش داده اید را ببندید.
یعنی خطوط زیر را در اول کد اضافه کنید.
انشا ا... مشکلتان حل شود.کد:Dim tmp As System.Drawing.Image = Me.PictureBox1.Image
Me.PictureBox1.Image = Nothing
If (tmp IsNot Nothing) Then tmp.Dispose()