给定一个 .png
具有透明背景的图像,我想找到非透明数据的边界框。使用嵌套 for
用 QImage.pixel()
循环痛苦地缓慢。 Qt 中是否有这样做的内置方法?
最佳答案
如果 pixel() 对您来说太慢,请考虑更有效的按行数据寻址,给定 QImage p:
int l =p.width(), r = 0, t = p.height(), b = 0;
for (int y = 0; y < p.height(); ++y) {
QRgb *row = (QRgb*)p.scanLine(y);
bool rowFilled = false;
for (int x = 0; x < p.width(); ++x) {
if (qAlpha(row[x])) {
rowFilled = true;
r = std::max(r, x);
if (l > x) {
l = x;
x = r; // shortcut to only search for new right bound from here
}
}
}
if (rowFilled) {
t = std::min(t, y);
b = y;
}
}
我怀疑它会比这更快。
关于qt - Qt 有办法找到图像的边界框吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3720947/