C# Writeablebitmap-向左滚动1像素,什么';这是最好的办法吗?(又称何处的memmove?)

C# Writeablebitmap-向左滚动1像素,什么';这是最好的办法吗?(又称何处的memmove?),c#,scroll,writeablebitmap,memmove,C#,Scroll,Writeablebitmap,Memmove,我有一张可写的地图 我想将内容向左滚动1个像素,并在最右边的列中填充一个新的像素行 在C++中,我将整个缓冲区1像素移到左边,并覆盖每行的最后一个像素-但是我不知道什么是最好的方法来做这件事,因为没有内存移动。< /P> < P>你可以创建一个新的位图,并使用DRAWWMAGE将一个部分从源拷贝到目的位图: 然后使用FillRectangle绘制一个像素宽的垂直矩形。您可以创建一个新位图,并使用DrawImage将一个部分从源位图复制到目标位图: 然后使用FillRectangle绘制一个一

我有一张可写的地图

我想将内容向左滚动1个像素,并在最右边的列中填充一个新的像素行


<>在C++中,我将整个缓冲区1像素移到左边,并覆盖每行的最后一个像素-但是我不知道什么是最好的方法来做这件事,因为没有内存移动。< /P> < P>你可以创建一个新的位图,并使用DRAWWMAGE将一个部分从源拷贝到目的位图:


然后使用FillRectangle绘制一个像素宽的垂直矩形。

您可以创建一个新位图,并使用DrawImage将一个部分从源位图复制到目标位图:


然后使用FillRectangle绘制一个一像素宽的垂直矩形。

Small nit:
WriteableBitMap
与C#无关。它是.NET.Small nit的一部分:
WriteableBitMap
与C#无关。它是.NET.NET的一部分,看起来非常慢。我的意思是,我所要做的就是将缓冲区中的所有像素向左移动一个位置,然后再向右添加一些像素。我想做这个>每秒60帧,我真的需要处理其他有趣的东西的能力。假设我有16个位图,实时更新。我所需要的只是一种方法来执行memmove,将像素向左移动1像素大小,用于整个writeablebitmap缓冲区。从智力上讲,位图是像素的矩形阵列。实际上,它是一个单个阵列,其中每N个像素开始一个新行。因此,没有将图像向左移动一个像素的物理概念。实际上,它是一个1d数组,这意味着将所有像素向左移动一个像素步长(也就是前一个像素的索引)会导致整个图像向左移动,只有最右边列上的像素无效,这并不重要,因为这是我打算覆盖的列。想想16个人以正方形行进,4个女孩,4个男孩,4个女孩,4个男孩。如果你把左边的第一个女孩移走,让其他人往上移动一个点,那么你的第一排就是:3个女孩-1个男孩,下一排是:3个男孩-1个女孩,等等。你不能像那样“滑动”像素,期望图像不变。这个想法不是要得到一个不变的图像,如果我想要的话,我就不需要图像了。其想法是使用单个memmove将整个1d阵列移动到前面1个像素。如果最后一列像素被新数据覆盖,则图像实际上是滚动的。也可以单独移动每一行,但是为每一行调用memmove的开销要比单次调用移动整个缓冲区花费更多的周期。这似乎非常缓慢。我的意思是,我所要做的就是将缓冲区中的所有像素向左移动一个位置,然后再向右添加一些像素。我想做这个>每秒60帧,我真的需要处理其他有趣的东西的能力。假设我有16个位图,实时更新。我所需要的只是一种方法来执行memmove,将像素向左移动1像素大小,用于整个writeablebitmap缓冲区。从智力上讲,位图是像素的矩形阵列。实际上,它是一个单个阵列,其中每N个像素开始一个新行。因此,没有将图像向左移动一个像素的物理概念。实际上,它是一个1d数组,这意味着将所有像素向左移动一个像素步长(也就是前一个像素的索引)会导致整个图像向左移动,只有最右边列上的像素无效,这并不重要,因为这是我打算覆盖的列。想想16个人以正方形行进,4个女孩,4个男孩,4个女孩,4个男孩。如果你把左边的第一个女孩移走,让其他人往上移动一个点,那么你的第一排就是:3个女孩-1个男孩,下一排是:3个男孩-1个女孩,等等。你不能像那样“滑动”像素,期望图像不变。这个想法不是要得到一个不变的图像,如果我想要的话,我就不需要图像了。其想法是使用单个memmove将整个1d阵列移动到前面1个像素。如果最后一列像素被新数据覆盖,则图像实际上是滚动的。也可以单独移动每一行,但是为每一行调用memmove的开销比只通过一次调用移动整个缓冲区要花费更多的周期。