は、このような無効化と呼ばれるピクセルを無効にするために、その後
private void CalculateZoomAndPadding()
{
Double imageAspect = (Double)pictureBox1.Image.Width/(Double)pictureBox1.Image.Height;
Double pbAspect = (Double)pictureBox1.Width/(Double)pictureBox1.Height;
Boolean heightRestricted = imageAspect < pbAspect;
hPadding = 0;
vPadding = 0;
if (heightRestricted)
{
zoom = (Double)pictureBox1.Height/(Double)pictureBox1.Image.Height;
Double imageWidth = (Double)pictureBox1.Image.Width * zoom;
hPadding = (Double)(pictureBox1.Width - imageWidth)/2d;
}
else
{
zoom = (Double)pictureBox1.Width/(Double)pictureBox1.Image.Width;
Double imageHeight = (Double)pictureBox1.Image.Height * zoom;
vPadding = (Double)(pictureBox1.Height - imageHeight)/2d;
}
}
画像痘のズームやパディングを取得するメソッドを追加しました:
pictureBox1.Invalidate(new Rectangle(Convert.ToInt32(Math.Floor(x * zoom)) + Convert.ToInt32(hPadding) -1, Convert.ToInt32(Math.Floor(y * zoom)) + Convert.ToInt32(vPadding) -1, PixelSize, PixelSize));
私が最初にこれをしたとき、私は唯一の無効ピクセルで直接覆われていますが、これが丸め誤差の対象となっていることがわかりましたので、いくつかの余分な部分が含まれています。
このようにして、画像処理が各ピクセルでどのように機能しているのか分かりませんが、完成した製品を取得するのではなく、完成した製品のみを取得します。 –
あなたはそれをスローダウンしていないか、いずれにしても処理が遅い場合を除き、すべてのピクセルで動作するとは限りません。あなたのモニターは1秒間に1000回更新できないことを忘れないでください。 – Mario
調査したい地域を見ているときに絞り込んでいますが、大きな画像を見ていると興味のあるところに行くのに10分かかることがあります。 –