C# 如何正确绘制图片盒?

C# 如何正确绘制图片盒?,c#,C#,我对picturebox上的标准图形有问题。实际上,我的picturebox图像大小是x=~5000 y=~3000。如果我使用 Graphics gr = Picturebox1.Creategraphics(); 滚动时,所有内容都会消失。否则,如果我使用Graphics gr=Graphics.FromImage(Picturebox1.Image) 我总是需要重新加载图片,但这很不舒服。我希望当用户“说”时,Picturebox图像会刷新。我找到一些图形dll,但它们不工作。我如何才能

我对picturebox上的标准图形有问题。实际上,我的picturebox图像大小是x=~5000 y=~3000。如果我使用

Graphics gr = Picturebox1.Creategraphics();
滚动时,所有内容都会消失。否则,如果我使用
Graphics gr=Graphics.FromImage(Picturebox1.Image)


我总是需要重新加载图片,但这很不舒服。我希望当用户“说”时,Picturebox图像会刷新。我找到一些图形dll,但它们不工作。我如何才能正确绘制上面所说的内容?

我猜您还没有查看绘制事件处理程序,所以只需执行以下操作:

private void Form1_Paint(object sender, PaintEventArgs e)
{
    string fileLocation = "Get File Location";              //WHERE IS THE IMAGE LOCATED?  DON'T FORGET FILE EXTENTIONS!!

    //Graphics g = e.Graphics;                              //GRAPHICS INSTANCE
    Image img = Image.FromFile(fileLocation);               //IMAGE INSTANCE

    //  IF YOU PLACED A PICTUREBOX IN YOUR FORM.
    Size maxSize = new Size();                              //CREATE SIZE MAXIMUMS FOR THE LARGEST YOU WANT AN IMAGE TO BE
    Size imgSize = new Size();                              //FIND THE IMAGE SIZE FOR COMPARISON

    maxSize.Width = 600;                                    //SET MAX WIDTH
    maxSize.Height = 600;                                   //SET MAX HEIGHT
    imgSize.Width = img.Width;                              //FIND IMAGE WIDTH
    imgSize.Height = img.Height;                            //FIND IMAGE HEIGHT

    pbImage.MaximumSize = maxSize;                          //MAKE SURE WE DONT GO PAST OUR MAX SIZE
    pbImage.BackgroundImageLayout = ImageLayout.Stretch;    //MAKE SURE THE IMAGE STRETCHES TO THE SIZE OF THE PICTURE BOX


    //HERE, WE RUN A SERIES OS CHECKS TO SEE HOW BIG TO MAKE OUR PICTURE BOX
    if (imgSize.Height < maxSize.Height && imgSize.Width < maxSize.Width)           //IF THE PICTURE IS SMALLER THAN THE MAX SIZE
        pbImage.Size = imgSize;                                                     //SET THE SIZE TO THAT OF THE PICTURE
    else if (imgSize.Height > maxSize.Height || imgSize.Width > maxSize.Width)      //IF THE WIDTH OR HEIGHT ARE LARGER THAN THE MAX
    {
        //SET HEIGHT
        if (imgSize.Height < maxSize.Height)                                        
            pbImage.Height = imgSize.Height;
        else pbImage.Height = maxSize.Height;
        //SET WIDTH
        if (imgSize.Width < maxSize.Width)
            pbImage.Width = imgSize.Width;
        else pbImage.Width = maxSize.Width;
    }
    else if (imgSize.Height > maxSize.Height && imgSize.Width > maxSize.Width)      //IF THE IMAGE IS BIGGER THAN OUR MAX
        pbImage.Size = maxSize;                                                     //MAKE IT THE SIZE OF THE MAX

    pbImage.Image = img;                                                            //PUT THE IMAGE IN THE BOX


    //  IF YOU DIDN'T - YOU SHOULD.  IT'S FAR MORE CONTROLLED
    //g.DrawImage(img, 0, 0, (float)img.Width, (float)img.Height);

}
private void Form1\u Paint(对象发送方,PaintEventArgs e)
{
string fileLocation=“Get File Location”;//图像位于哪里?不要忘记文件扩展名!!
//Graphics g=e.Graphics;//图形实例
Image img=Image.FromFile(fileLocation);//图像实例
//如果您在表单中放置了图片盒。
Size maxSize=new Size();//为图像的最大值创建最大值
Size imgSize=new Size();//查找要比较的图像大小
maxSize.Width=600;//设置最大宽度
maxSize.Height=600;//设置最大高度
imgSize.Width=img.Width;//查找图像宽度
imgSize.Height=img.Height;//查找图像高度
pbImage.MaximumSize=maxSize;//确保我们没有超过最大大小
pbImage.BackgroundImageLayout=ImageLayout.Stretch;//确保图像拉伸到图片框的大小
//在这里,我们运行一系列操作系统检查,看看图片框有多大
if(imgSize.HeightmaxSize.Height | | imgSize.Width>maxSize.Width)//如果宽度或高度大于最大值
{
//设定高度
if(imgSize.HeightmaxSize.Height&&imgSize.Width>maxSize.Width)//如果图像大于最大值
pbImage.Size=maxSize;//使其成为最大
pbImage.Image=img;//将图像放入框中
//如果你没有,你应该这样做。它更容易控制
//g、 绘图图像(img,0,0,(浮动)img.Width,(浮动)img.Height);
}
希望有帮助。显然,根据您的喜好修改
fileLocation
string
值以及最大宽度和高度。如果有任何问题,请进行更多研究:


切勿使用CreateGraphics。正如你发现的,这是一个临时图纸。使用绘画活动提供的图形。这个主题很容易搜索。我已经告诉过你了。绘画事件提供的图形对象。
Graphics
对象是一种工具,可用于绘制相关位图,包括控件的表面。系统需要在无法控制时绘制所有控件的曲面;因此,必须从系统将调用的一个事件(即
Paint
事件)创建要添加到这些曲面的所有内容。对于从
control.CreateGraphics()
获取的
graphics
对象,只有非持久性图形操作(如显示动态橡皮筋矩形)才可以。而不画图的测量……当你写“平均”时,你可能是指“介于两者之间”或“两者”。但你真正需要的是学习规则。那你就可以跟他们玩了,没有这回事。不要再奢望那些不存在的东西了。您可以将它们结合起来,但首先要从绘画活动中学习绘画!