Как выровнять изображение по правому краю внизу - PullRequest
2 голосов
/ 24 августа 2011

у меня picturebox1 намного больше, чем изображение, которое я хотел бы загрузить.То, что я хочу сделать, это выровнять это изображение по правому краю и нижней части окна рисунка, как на скриншоте: enter image description here

Редактировать: Работает

 private void FromCameraPictureBox_Paint(object sender, PaintEventArgs e)
    {

        if (loadimage == true)
        {
            var image = new Bitmap(@"image.jpg");
            if (image != null)
            {
                var g = e.Graphics;
                // -- Optional -- //
                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                // -- Optional -- //
                g.DrawImage(image,
                    FromCameraPictureBox.Width - image.Width,  // to right
                    FromCameraPictureBox.Height - image.Height, // to bottom
                    image.Width,
                    image.Height);
            }

       }
       loadimage = false;
    }

, и теперь я хочу запустить Paintevent изкнопка:

void TestButtonClick(object sender, EventArgs e)
    {

        loadimage = true;
    }

Как это сделать?

Ответы [ 2 ]

4 голосов
/ 24 августа 2011

Я запутался, почему этот код работает противно:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    var g = e.Graphics;
    g.DrawImage(pictureBox1.Image, pictureBox1.Width - pictureBox1.Image.Width, pictureBox1.Height - pictureBox1.Image.Height);
}

РЕДАКТИРОВАТЬ:

Хорошо, теперь он работает:

private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    var image = Properties.Resources.SomeImage; //Import via Resource Manager
    //Don't use pictureBox1.Image property because it will
    //draw the image 2 times.
    //Make sure the pictureBox1.Image property is null in Deisgn Mode
    if (image != null)
    {
        var g = e.Graphics;
        // -- Optional -- //
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        // -- Optional -- //
        g.DrawImage(image, 
            pictureBox1.Width - image.Width,  // to right
            pictureBox1.Height - image.Height, // to bottom
            image.Width,
            image.Height);
    }
}

ОБНОВЛЕНИЕ:

Работает :) Но есть ли возможность использовать этот код без PaintEventsArgs?Я пытался добавить к своему флагу кнопки и рисовать (если (flag == true), тогда выполнить Ваш код, но он ничего не делает - никакого рисования на picturebox1

Это потому, что событие Paintзапускается один раз. Нам нужно сделать его перерисованным. Метод перерисовки по умолчанию для элементов управления: Refresh();

Вот, пожалуйста,

bool flag = false;
Bitmap image = null;
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
    if (flag && image != null)
    {
        var g = e.Graphics;
        // -- Optional -- //
        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
        // -- Optional -- //
        g.DrawImage(image,
            pictureBox1.Width - image.Width,
            pictureBox1.Height - image.Height,
            image.Width,
            image.Height);
    }
}

private void button2_Click(object sender, EventArgs e)
{
    image = new Bitmap("someimage.png");
    flag = true;
    pictureBox1.Refresh(); //Causes it repaint.
}

//If you resize the form (and anchor/dock the picturebox) 
//or just resize the picturebox then you will need this:
private void pictureBox1_Resize(object sender, EventArgs e)
{
    pictureBox1.Refresh();
}
2 голосов
/ 24 августа 2011

Вы можете использовать объекты Bitmap + Graphics и копировать часть изображения в новое растровое изображение (результат), который будет назначен для поля рисунка:

Size resultSize = new Size(100, 100);
Bitmap result = new Bitmap(resultSize.Width, resultSize.Height);
float left = yourbitmap.Width - resultSize.Width;
float top = yourbitmap.Height - resultSize.Height;
using (Graphics g = Graphics.FromImage(result))
{
    g.InterpolationMode = InterpolationMode.HighQualityBicubic;
    g.DrawImage(yourbitmap, left, top, resultSize.Width, resultSize.Height);
    g.Save();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...