2016-12-29 92 views
0

我對pict​​urebox上的標準Graphics有問題。其實我的picturebox圖片大小是x =〜5000 y =〜3000。如果我使用如何正確繪製圖片框?

Graphics gr = Picturebox1.Creategraphics(); 

滾動時一切消失。否則,如果我使用Graphics gr = Graphics.FromImage(Picturebox1.Image);

我總是需要重新加載圖片,但這是非常不舒服的。我希望當用戶「說」時刷新圖片盒圖片。我發現了一些圖形DLL,但他們不工作。我如何繪製上面說得對嗎?

+2

從不使用的createGraphics。正如你發現的那樣,這是一個臨時圖。使用繪畫事件提供的圖形。在這個問題上很容易搜索。 – LarsTech

+0

現在,Creategraphics是暫時的,Graphics.FromImage是永久的。我需要平均的東西 –

+2

我已經告訴過你了。 Graphic事件提供的圖形對象。 – LarsTech

回答

-1

我猜你還沒有到油漆事件處理看,所以才這樣做:

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); 

} 

希望有所幫助。顯然修改stringfileLocation和最大的寬度和高度,以您的喜好。任何過去的這個,做更多的研究:

https://msdn.microsoft.com/en-us/library/system.windows.forms.control.paint.aspx https://msdn.microsoft.com/en-us/library/system.drawing.graphics(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.windows.forms.picturebox(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx