2016-12-29 1 views
0

picturebox의 표준 그래픽에 문제가 있습니다. 사실 내 picturebox 이미지 크기는 x = ~ 5000 y = ~ 3000입니다. 내가 사용하는 경우Picturebox에서 올바르게 그리는 방법은 무엇입니까?

Graphics gr = Picturebox1.Creategraphics(); 

스크롤 할 때 모든 것이 사라집니다. 그렇지 않으면 내가 사용하는 경우 Graphics gr = Graphics.FromImage(Picturebox1.Image);

항상 그림을 다시로드해야하지만 이것은 매우 불편합니다. 사용자가 "말합니다"때 Picturebox 이미지가 새로 고침됩니다. 일부 그래픽 DLL을 찾았지만 작동하지 않습니다. 어떻게 그릴 수 있습니까? 위의 말은 정확하게 무엇입니까?

+2

은 CreateGraphics 해당를 사용하지 마십시오. 당신이 알았 듯이, 그것은 일시적인 그림입니다. 페인트 이벤트에서 제공하는 그래픽을 사용하십시오. 이 주제에 대해 매우 쉽게 검색 할 수 있습니다. – LarsTech

+0

이제 Creategraphics는 일시적입니다. Graphics.FromImage는 영구적입니다. 평균이 필요합니다. –

+2

나는 이미 말씀 드렸습니다. Paint 이벤트에 의해 제공된 그래픽 객체입니다. – 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); 

} 

희망을. 분명히 fileLocation에 대한 string 값과 원하는 너비와 높이를 수정하십시오. 지난 뭐든지, 더 많은 연구를 수행

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

관련 문제