Windows Forms: Как напрямую привязать растровое изображение к PictureBox?

Я просто пытаюсь создать небольшое приложение на C# .Net 4.0 с помощью Windows Forms (WPF, я совсем не знаю, Windows Forms, по крайней мере, немного:-)).

Можно ли напрямую связать System.Drawing.Bitmap возражать против Image свойство PictureBox? Я пытался использовать PictureBox.DataBindings.Add(...) но это не похоже на работу.

Как я могу это сделать?

Спасибо и всего наилучшего,
Оливер

3 ответа

Это работает для меня:

Bitmap bitmapFromFile = new Bitmap("C:\\temp\\test.bmp");

pictureBox1.Image = bitmapFromFile;

или в одну строку:

pictureBox1.Image = new Bitmap("C:\\temp\\test.bmp");

Это может быть слишком сложно - согласно документации MSDN, вы можете просто назначить растровое изображение непосредственно свойству PictureBox.Image.

Вы можете использовать PictureBox.DataBindings.Add(...)
Хитрость заключается в том, чтобы создать отдельное свойство для объекта, к которому вы привязываете, для обработки преобразования между нулевым и пустым изображением.

Я сделал это таким образом.

В моей форме загрузки я использовал

this.PictureBox.DataBindings.Add(new Binding("Visible", this.bindingSource1, "HasPhoto", false, DataSourceUpdateMode.OnPropertyChanged));

this.PictureBox.DataBindings.Add(new Binding("Image", this.bindingSource1, "MyPhoto",false, DataSourceUpdateMode.OnPropertyChanged));

В моем объекте у меня есть следующее

[NotMapped]
    public System.Drawing.Image MyPhoto
    {
        get
        {

            if (Photo == null)
            {
                return BlankImage;   

            }
            else
            {
                if (Photo.Length == 0)
                {
                    return BlankImage;  

                }
                else
                {
                    return byteArrayToImage(Photo);
                }
            }

        }
        set
        {
            if (value == null)
            {
                Photo = null;
            }
            else
            {


                if (value.Height == BlankImage.Height)  // cheating
                {
                    Photo = null;
                }
                else
                {
                    Photo = imageToByteArray(value);
                }
            }

        }
    }

    [NotMapped]
    public Image BlankImage {
        get
        {

            return new Bitmap(1,1);
        }
    }

    public static byte[] imageToByteArray(Image imageIn)
    {

            MemoryStream ms = new MemoryStream();
            imageIn.Save(ms, ImageFormat.Gif);
            return ms.ToArray();

    }

    public static Image byteArrayToImage(byte[] byteArrayIn)
    {

            MemoryStream ms = new MemoryStream(byteArrayIn);
            Image returnImage = Image.FromStream(ms);
            return returnImage;

    }

Ты можешь сделать:

System.Drawing.Bitmap bmp = new System.Drawing.Bitmap("yourfile.bmp");
picturebox1.Image = bmp;
Другие вопросы по тегам