2016-12-29 2 views
0

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

私はすでにあなたに言った。ペイントイベントによって提供されるグラフィックオブジェクト。 – 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に変更し、最大幅と高さを好みに合わせて変更してください。この過去のものは、より多くの研究を行う。

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

関連する問題