【发布时间】:2015-04-24 08:20:44
【问题描述】:
我在 C++ 中使用 GDI+ 来处理一些位图图像、更改颜色和调整图像大小。我的代码在某个特定点非常慢,我正在寻找一些潜在的方法来加快 VS2013 Profiler 中突出显示的行
for (UINT y = 0; y < 3000; ++y)
{
//one scanline at a time because bitmaps are stored wrong way up
byte* oRow = (byte*)bitmapData1.Scan0 + (y * bitmapData1.Stride);
for (UINT x = 0; x < 4000; ++x)
{
//get grey value from 0.114*Blue + 0.299*Red + 0.587*Green
byte grey = (oRow[x * 3] * .114) + (oRow[x * 3 + 1] * .587) + (oRow[x * 3 + 2] * .299); //THIS LINE IS THE HIGHLIGHTED ONE
//rest of manipulation code
}
}
关于如何更好地处理这条算术线的任何方便提示?这导致我的代码大幅减速
提前致谢!
【问题讨论】:
-
处理 120 万像素永远不会非常快。将您的浮点数乘以 1000,并在整个过程中使用整数算术。您还可以通过常量加法来更改乘以 3。
-
请务必选择答案并点赞,以便我们将其标记为已完成
标签: c++ performance bitmap gdi+