質問
私は、画像ボックスの写真にズームインしてズームインし、ズームアウトするトラックバーを作ろうとしています。これは私の現在のコードです:
namespace Zoom_in_and_Out_Tool
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Image imgOriginal;
private void Form1_Load(object sender, EventArgs e)
{
// set image location
imgOriginal = Image.FromFile(@"C:\New Folder\picture1.jpg");
picBox.Image = imgOriginal;
// set Picture Box Attributes
picBox.BackgroundImageLayout = ImageLayout.Stretch;
// set Slider Attributes
zoomSlider.Minimum = 1;
zoomSlider.Maximum = 5;
zoomSlider.SmallChange = 1;
zoomSlider.LargeChange = 1;
zoomSlider.UseWaitCursor = false;
// reduce flickering
this.DoubleBuffered = true;
}
public Image PictureBoxZoom(Image img, Size size)
{
Bitmap bm = new Bitmap(img, Convert.ToInt32(img.Width * size.Width), Convert.ToInt32(img.Height * size.Height));
Graphics grap = Graphics.FromImage(bm);
grap.InterpolationMode = InterpolationMode.HighQualityBicubic;
return bm;
}
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if (zoomSlider.Value > 0)
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
}
}
現在、2つの問題が発生しています。 1つは、Line Grap.interpolationMode = interpolationMode.highqualityBicubicでコンパイルしたいということです。 。 2番目の問題は、ズームをズームしようとすると、エラーが発生することです。「argumentExceptionは、bitmap bm = new bitmap(img、convert.toint32(img.width * size.width)、変換)でエラーが発生しました。 .toint32(img.height * size.height)); "どんな助けも素晴らしいでしょう、
ありがとう
アップデート最初のエラーには、「名前「InterpolationMode」は現在のコンテキストには存在しません」というこの行にコメントするときの2番目のエラーは、「nullReferenceExceptionは「オブジェクトの参照」ではなく、オブジェクトのインスタンスに設定されていません。」ラインbitmap bm = new bitmap(img、convert.toint32(img.width * size.width)、convert.toint32(img.height * size.height));
ありがとう
解決
含む
using System.Drawing.Drawing2D;
使用リストで。
2番目のエラーは、いずれかのためです img
ヌルまたは size
ヌルであること。
他のヒント
最初 コンパイラエラーは、以下の未知の参照によって引き起こされる可能性が高い InterpolationMode.HighQualityBicubic
. 。 InterpolationMode
列挙はにあります Drawing2D
名前空間、子供の名前空間です System.Drawing
.
追加を追加することにより、このエラーを修正できます Using
の指令 System.Drawing.Drawing2D
, 、またはコード内の名前空間を完全に適格にすることによって:
grap.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic;
2番目 コードの問題は、このメソッドのパラメーターとして指定している画像です(このメソッド)img
)null参照です。 Scroll
ズームスライダーのイベントは、コントロールが作成されるとすぐに(フォームのコンストラクターで)上昇します。これは、フォームのコードの前です Load
メソッドが実行されます。これは、画像を作成するものです(ディスク上のファイルからロードすることで)。
にnullチェックを追加してみてください Scroll
イベントハンドラー:
private void zoomSlider_Scroll(object sender, EventArgs e)
{
if ((zoomSlider.Value > 0) && (imgOriginal != null))
{
picBox.Image = null;
picBox.Image = PictureBoxZoom(imgOriginal, new Size(zoomSlider.Value, zoomSlider.Value));
}
}
ついに, 、私はあなたが設定していることに気づきました BackgroundImageLayout
写真ボックスのプロパティですが、投稿するコードはどれも、実際には、画像ボックスの背景画像を指定していません。設定するつもりでしたか SizeMode
財産 画像の表示方法を調整するには?何かのようなもの:
picBox.SizeMode = PictureBoxSizeMode.StretchImage;