画像をズームインまたはズームアウトするトラックバーがありますが、スムーズにズームすることはできません。また、200%以上のズームで分割された2番目の遅れもあります。この画像をもっと速くするにはどうすればいいですか?
private void trackBar1_ValueChanged(object sender, EventArgs e)
{
zoom = trackBar1.Value;
zoomValue = (float)(zoom/10.0f);
newBitmap = new Bitmap((int)(currWidth * zoomValue), (int)(currHeight * zoomValue));
g = Graphics.FromImage(newBitmap);
Matrix mx = new Matrix();
mx.Scale(zoomValue, zoomValue);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.Transform = mx;
g.DrawImage(currImage, new Rectangle(0, 0, currWidth, currHeight));
g.Dispose();
mx.Dispose();
panel1.BackgroundImage = newBitmap;
}
私は、ユーザーコントロールの誰かが非常にスムーズにズームするhttp://www.codeproject.com/KB/graphics/YLScsImagePanel.aspxを作りました。遅れは全くありません。私は新しいビットマップにそれが遅れたびに作成していますので、
private void trackBar1_Scroll(object sender, EventArgs e)
{
imagePanel1.Zoom = trackBar1.Value * 0.02f;
}
これは、カスタムコントロールImagePanel.cs
public float Zoom
{
get { return zoom; }
set
{
if (value < 0.001f) value = 0.001f;
zoom = value;
displayScrollbar();
setScrollbarValues();
Invalidate();
}
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
//draw image
if(image!=null)
{
Rectangle srcRect,distRect;
Point pt=new Point((int)(hScrollBar1.Value/zoom),(int)(vScrollBar1.Value/zoom));
if (canvasSize.Width * zoom < viewRectWidth && canvasSize.Height * zoom < viewRectHeight)
srcRect = new Rectangle(0, 0, canvasSize.Width, canvasSize.Height); // view all image
else srcRect = new Rectangle(pt, new Size((int)(viewRectWidth/zoom), (int)(viewRectHeight/zoom))); // view a portion of image
distRect=new Rectangle((int)(-srcRect.Width/2),-srcRect.Height/2,srcRect.Width,srcRect.Height); // the center of apparent image is on origin
Matrix mx=new Matrix(); // create an identity matrix
mx.Scale(zoom,zoom); // zoom image
mx.Translate(viewRectWidth/2.0f,viewRectHeight/2.0f, MatrixOrder.Append); // move image to view window center
Graphics g=e.Graphics;
g.InterpolationMode=interMode;
g.Transform=mx;
g.DrawImage(image,distRect,srcRect, GraphicsUnit.Pixel);
}
}
からであるが、それか?このようにズームをスムーズにするにはどうすればよいですか?
codeprojectのコードを使用しないのはなぜですか? – Yahia
私はそれを水平にセンタリングしようとすると、イメージの隠された部分が垂直にぶち壊されます。スクロールバーは見た目が小さすぎます。私が現在していることは、それがほんの少しだけズームしないようにしたいのと同じように動作します。 – Jonas
ペイントコードとtrackBar1_ValueChangedコードを分割して、トラックバーに沿ってスクロールするようにします。 – CodingBarfield