Houdini HDK读取PNG精度问题
Houdini环境下,PNG图片读取精度解决方法
调试了很长时间,最终发现用FreeImage_GetBits方法读取所有bit,然后用位运算暴力拼接是能够把精度对齐到Houdini HeightField File节点的
void
GL_SOP_heightfieldReader::read_png_file(const char* filename) {
FreeImage_Initialise();
FREE_IMAGE_FORMAT format = FreeImage_GetFIFFromFilename(filename);
FIBITMAP* image = FreeImage_Load(format, filename, PNG_DEFAULT);
if (!image) {
std::cerr << "无法加载图像。" << std::endl;
return;
}
int width = FreeImage_GetWidth(image);
int height = FreeImage_GetHeight(image);
//Height Field相关
GEO_PrimVolume* vol = GU_PrimVolume::build(gdp);
vol->getVoxelWriteHandle()->size(width, height, 1);
voxel_writehandle = vol->getVoxelWriteHandle().get();
GA_Attribute* name_attrib = gdp->addStringTuple(GA_ATTRIB_PRIMITIVE, "name", 1);
GA_RWHandleS(name_attrib).set(0, "height");
//Height Field相关
BYTE* bits = FreeImage_GetBits(image); //在这里把所有的位读取到
int handle = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
unsigned short _data = bits[handle + 1] << 8 | bits[handle];
voxel_writehandle->setValue(x, y, 0, _data / 65535.0f);
handle += 2; //16 Bit Integer图,handle递增"16Bit/8Bit"
}
handle += 2; //注意!这里是个坑点,可以认为是图片换行标记,一定要跳过。
}
FreeImage_Unload(image);
}
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0协议,完整转载请注明来自 零度冰山
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果
