سؤال

أحاول صنع شريط تتبع سيصبح ويخرج على صورة في صندوق صور. هذا هو الكود الحالي الخاص بي:

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;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top