我正在處理一些圖像處理和調試我正在覆蓋原始位圖上的顏色。使單個像素無效?
的問題是圖像與SizeMode一個圖片框渲染設置變焦和我每次更新像素實在是太慢了,只是變慢較大PictureBox的是(對於相同尺寸的圖像)
無效我認爲可能會有所幫助的是,如果我只是使已更改的像素無效,但我不知道如何將已更改像素的座標轉換爲控件上呈現的矩形。很明顯,如果圖像被繪製得比原始圖像大,那麼我無效的矩形將會超過一個像素
我正在處理一些圖像處理和調試我正在覆蓋原始位圖上的顏色。使單個像素無效?
的問題是圖像與SizeMode一個圖片框渲染設置變焦和我每次更新像素實在是太慢了,只是變慢較大PictureBox的是(對於相同尺寸的圖像)
無效我認爲可能會有所幫助的是,如果我只是使已更改的像素無效,但我不知道如何將已更改像素的座標轉換爲控件上呈現的矩形。很明顯,如果圖像被繪製得比原始圖像大,那麼我無效的矩形將會超過一個像素
加入到得到的圖片痘的縮放和填充的方法
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));
當我第一次這樣做,我只無效的直接由像素覆蓋,但發現這受到舍入誤差的影響,因此將其擴大到包括一些額外的值。
您可以更改所有像素,然後只是使圖像失效一次嗎?
我只是添加一個計時器,每秒觸發30或60次,使整個控件失效。雖然更新可能會稍微有些延遲,但由於顯示器的刷新頻率很可能只有60 Hz,所以您不應該注意到它。
這是假設它可以**每秒失效30次。 –
這樣我就不會看到圖像處理如何在每個像素上工作,我只會得到完成的產品,而不是它到達那裏的步驟。 –
無論如何,您不會看到它在每個像素上都能正常工作,除非您要麼將其投入運行,要麼處理速度相當慢。不要忘記你的顯示器無法每秒更新1000次。 – Mario
當我正在查看我想要調查的區域時,我正在對其進行限制,但當我在查看大圖時,可能需要10分鐘才能到達我感興趣的位置。 –