2011-01-11 85 views
1

我有一个位图,我通过平铺多次同一图形创建。当位图被创建时,它会根据特定的标准为图块着色。c#winforms GDI +

加载位图时,我希望给用户更改基于进一步预定义标准的图块颜色的选项。因此,我是否需要放弃当前的位图,使用新颜色再次生成并附加到面板上。或者我可以遍历每个图块的位图并更改颜色的方式?

谢谢。

回答

1

这取决于用户多长时间更换瓷砖颜色。如果他们不会经常这样做,那么生成一个新的位图可能会更容易(主要是因为您的代码看起来像是针对此场景进行了优化)。

然而,更好的性能可能是使用Bitmap.LockBits/UnlockBits方法获取位图中的像素数据,然后直接操纵像素数据。有关如何执行此操作的示例,请参阅Bitmap.LockBits方法(http://msdn.microsoft.com/zh-cn/library/5ey6h79d.aspx)上的MSDN文档。

+0

http://www.bobpowell.net/lockingbits.htm也值得一看,如果你想使用'不安全'的代码(它会快一点)。 – Josh 2011-01-11 10:47:14

1

据我所知,唯一可以通过位图并改变颜色的方法是逐像素地进行,所以我认为最好的方法是在用户选择新颜色时从头开始生成位图。

+1

这是正确的。位图是像素的空间映射阵列。它没有任何添加到图像中的“贴图”的概念。在单个图块中重新着色像素,然后重新创建多平铺图形。确保在不再需要时处理先前的位图。 – 2011-01-11 10:42:18