在非常大的面板上绘制图像C#

时间:2014-10-21 09:16:38

标签: c# visual-studio-2013 panel doublebuffered

我有一个面板调整内容大小,有时该内容要求面板为18660像素×118320像素。

现在在一个小面板上,我可以绘制一组没有问题和闪烁的图像但是当面板变得那么大时它会开始闪烁。我已经将doublebuffering属性设置为true,并且对于小面板工作正常但是当它变得太大时会开始闪烁...

当我滚动时,有没有人知道如何防止这种情况以及如何防止它闪烁.... 我将在下面放一些代码来说明我如何在面板上画画等等。

我使用lockbits创建一个图像,该图像是可见区域的宽度和高度,而不是整个面板:

for (y = 0; y < height; y++)
{
    if (y % size == 0)
    {
        if (showCons && y == 0)
            seq = cons;
        else
            seq = Sequences[(y / size) + vs];
        line = 0;
    }
    for (x = 0; x < width; x += size)
    {
        if ((offSet * 4) + (size * 4) < numBytes)
        {
            if (!HighLight || (HighLight && seq[(x + hs) / size] != refSequenceUp[(x + hs) / size]) == diff)
            {
                p = ColorImages[seq[(x / size) + hs]];
                if (x + size > width)
                {
                    Buffer.BlockCopy(p, line * size * 4, screen, offSet * 4, (width - x) * 4);
                    offSet += (width - x);
                }
                else
                {
                    Buffer.BlockCopy(p, line * size * 4, screen, offSet * 4, size * 4);
                    offSet += size;
                }
            }
            else
            {
                p = BlankImages[seq[(x / size) + hs]];
                if (x + size > width)
                {
                    Buffer.BlockCopy(p, line * size * 4, screen, offSet * 4, (width - x) * 4);
                    offSet += (width - x);
                }
                else
                {
                    Buffer.BlockCopy(p, line * size * 4, screen, offSet * 4, size * 4);
                    offSet += size;
                }
            }
        }
    }
    if (showCons && y > 0 && y == (size - 1))
    {
        y = -1;
        showCons = !showCons;
    }
    line++;
}

编辑:

我已经重写了onpaintbackground方法,并将其留空,它有点停止闪烁,但仍然比小面板上的绘图更长,当onpaintbackground被覆盖时,它会在图像中留下人工制品......

0 个答案:

没有答案