Example usage of the OiioImageLoader class with MaterialX ImageHandler.
()
| 371 | |
| 372 | |
| 373 | def test_load_save(): |
| 374 | """ |
| 375 | Example usage of the OiioImageLoader class with MaterialX ImageHandler. |
| 376 | """ |
| 377 | parser = argparse.ArgumentParser(description="MaterialX OIIO Image Handler") |
| 378 | parser.add_argument("path", help="Path to the image file") |
| 379 | parser.add_argument("--flip", action="store_true", help="Flip the image vertically") |
| 380 | parser.add_argument("--preview", action="store_true", help="Preview the image before saving") |
| 381 | args = parser.parse_args() |
| 382 | |
| 383 | test_image_path = args.path |
| 384 | if not os.path.exists(test_image_path): |
| 385 | logger.error(f"Image file not found: {test_image_path}") |
| 386 | return |
| 387 | |
| 388 | # Create MaterialX handler with custom OIIO image loader |
| 389 | loader = OiioImageLoader() |
| 390 | loader.set_preview(args.preview) |
| 391 | handler = mx_render.ImageHandler.create(loader) |
| 392 | logger.info(f"Created image handler with loader ({loader.get_identifier()}): {handler is not None}") |
| 393 | handler.addLoader(loader) |
| 394 | |
| 395 | mx_filepath = mx.FilePath(test_image_path) |
| 396 | |
| 397 | # Load image using handler API |
| 398 | logger.info('-'*45) |
| 399 | logger.info(f"Loading image from path: {mx_filepath.asString()}") |
| 400 | mx_image = handler.acquireImage(mx_filepath) |
| 401 | if mx_image: |
| 402 | # Q: How to check for failed image load as you |
| 403 | # get back a 1x1 pixel image. |
| 404 | if mx_image.getWidth() == 1 and mx_image.getHeight() == 1: |
| 405 | logger.warning("Failed to load image. Got 1x1 pixel image returned") |
| 406 | return |
| 407 | logger.info(f"MaterialX Image loaded via Image Handler:") |
| 408 | logger.info(f" Dimensions: {mx_image.getWidth()}x{mx_image.getHeight()}") |
| 409 | logger.info(f" Channels: {mx_image.getChannelCount()}") |
| 410 | logger.info(f" Base type: {mx_image.getBaseType()}") |
| 411 | |
| 412 | # Save image using handler API (to a new file) |
| 413 | logger.info('-'*45) |
| 414 | |
| 415 | # Retrieve cached image |
| 416 | mx_image = handler.acquireImage(mx_filepath) |
| 417 | if mx_image: |
| 418 | out_path = mx.FilePath("saved_" + os.path.basename(test_image_path)) |
| 419 | if handler.saveImage(out_path, mx_image, verticalFlip=args.flip): |
| 420 | logger.info(f"MaterialX Image saved to {out_path.asString()}") |
| 421 | else: |
| 422 | logger.error("Failed to save image.") |
| 423 | else: |
| 424 | logger.error("Failed to acquire image for saving.") |
| 425 | else: |
| 426 | logger.error("Failed to load image.") |
| 427 | |
| 428 | if __name__ == "__main__": |
| 429 | test_load_save() |
no test coverage detected