أداة Zoomer Image في C#
-
25-09-2019 - |
سؤال
أحاول صنع شريط تتبع سيصبح ويخرج على صورة في صندوق صور. هذا هو الكود الحالي الخاص بي:
namespace Zoom_in_and_Out_Tool
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Image imgOriginal;
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = Image.FromFile(@"C:\New Folder\picture1.jpg");
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.BackgroundImageLayout = ImageLayout.Stretch;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
// reduce flickering
this.DoubleBuffered = true;
}
public Image PictureBoxZoom(Image img, Size size)
{
Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert.ToInt32(img.Height * size.Height));
Graphics grap = Graphics.FromImage(bm);
grap.InterpolationMode = InterpolationMode.HighQualityBicubic;
return bm;
}
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
}
}
حاليا يأتي مع 2 مشاكل. واحد هو أنه يريد التجميع مع Grap.InterpolationMode = interpolationMode.highqualityBicubic ؛ . المشكلة الثانية هي أنه عندما أحاول التكبير ، فإنه يأتي بالخطأ: "" "تم عدم تعرض" endumentException "في السطر: BITMAP BM = New Bitmap (IMG ، Convert.toint32 (img.width * size.width) ، تحويل .toint32 (img.height * size.hight)) ؛ "أي مساعدة ستكون رائعة ،
شكرًا
تحديثيقول الخطأ الأول: "اسم" interpolationMode "غير موجود في السياق الحالي" الخطأ الثاني عندما أعلق على هذا السطر هو: "لم يتم تعيين مرجع كائن" nullreference ". على خط bitmap bm = new bitmap (img ، convert.toint32 (img.width * size.width) ، convert.toint32 (img.height * size.height)) ؛
شكرًا
المحلول
تضمن
using System.Drawing.Drawing2D;
في قائمة استخدامك.
قد يكون الخطأ الثاني بسبب إما img
أن تكون لاغية أو size
كونها لاغية.
نصائح أخرى
ال أول خطأ المترجم أكثر من المحتمل أن يكون سبب إشارة غير معروفة إلى InterpolationMode.HighQualityBicubic
. ال InterpolationMode
تم العثور على التعداد في Drawing2D
مساحة الاسم ، وهي مساحة اسم الطفل System.Drawing
.
يمكنك إصلاح هذا الخطأ إما عن طريق إضافة إضافي Using
التوجيه ل System.Drawing.Drawing2D
, ، أو عن طريق التأهيل بالكامل مساحة الاسم في الكود الخاص بك:
grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;
ال ثانيا مشكلة الكود الخاص بك هي أن الصورة التي تحددها كمعلمة لهذه الطريقة (img
) هو مرجع فارغ. ال Scroll
من المحتمل أن يتم رفع حدث تمرير Zoom الخاص بك بمجرد إنشاء التحكم (في مُنشئ النموذج الخاص بك) ، وهو قبل الكود في النموذج الخاص بك Load
يتم تشغيل الطريقة ، وهو ما يخلق الصورة (عن طريق تحميلها من ملف على القرص).
حاول إضافة فحص فارغ إلى Scroll
معالج الأحداث:
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if ((zoomSlider.Value > 0) && (imgOriginal != null))
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
أخيراً, ، لاحظت أنك تضع BackgroundImageLayout
خاصية مربع الصورة ، ولكن لا يوجد أي من الكود الذي تنشره هو في الواقع تحديد صورة خلفية لمربع الصورة. هل قصدت تعيين ملف SizeMode
منشأه لضبط كيفية عرض الصورة؟ شيء مثل:
picBox.SizeMode = PictureBoxSizeMode.StretchImage;