有没有办法优化它:字符存储在字节的"矩阵"中,尺寸为 9x16,为了示例,我们称之为 character
.字节可以是1
或0
的值,分别表示绘制前景和绘制背景。X
和 Y
变量是整数,表示用于SetPixel()
函数的 X 和 Y 坐标。 BG
和FG
分别表示背景色和前景色,这两种类型的Color
。
算法本身的绘图部分如下所示:
for(int i=0;i<16;i++)
{
for(int j=0;j<9;j++)
{
if(character[i][j] == 1)
{
SetPixel(X,Y,BG);
}
else
{
SetPixel(X,Y,FG);
}
X++;
}
X=0;
Y++;
}
稍后,X 递增 9,Y 设置回 0。这个算法的问题是,当它被调用来绘制一个字符串(许多字符顺序(时,它非常慢。
,我不太确定字符是什么意思。
-
GetPixel
内部调用LockBits
以固定内存 - 尔格 最好使用一次
LockBits
并完成它 - 总是打电话给
UnlockBits
- 使用
unsafe
直接指针访问也可以为您提供少量性能 - 此外(在这种情况下(可以优化
for
循环(代码明智(以包含其他索引。
示例
protected unsafe void DoStuff(string path)
{
...
using (var b = new Bitmap(path))
{
var r = new Rectangle(Point.Empty, b.Size);
var data = b.LockBits(r, ImageLockMode.ReadOnly, PixelFormat.Format32bppPArgb);
var p = (int*)data.Scan0;
try
{
for (int i = 0; i < 16; i++, Y++)
for (int j = 0, X = 0; j < 9; j++, X++)
*(p + X + Y * r.Width) = character[i][j] == 1 ? BG : FG;
}
finally
{
b.UnlockBits(data);
}
}
}
Bitmap.LockBits
将位图锁定到系统内存中。
Bitmap.UnlockBits
从系统内存中解锁此位图。
unsafe
unsafe 关键字表示不安全的上下文,这是必需的 任何涉及指针的操作。
延伸阅读
不安全的代码和指针
Bitmap.GetPixel
锁位与获取像素集像素 - 性能