OK, I think there might be too few people know how to do this. I will go
back to c++. Python is too slow to complete the job.

Thank!

Will


2011/9/1 Will Zhou <[email protected]>

> Hello,
>
> This script loads an image file and sends it to Maya RenderView. It can
> work, but just too slow when the resolution is larger than 1024x768. Does
> anyone know how to speed it up please? Not one pixel by one pixel, but
> region by region. Is there any example like using
> OpenMayaRender.RV_PIXEL(32) ? I know it's wrong, but how to create a
> RV_PIXEL array? Thank you very much.
>
> ############# CODE BEGIN #################
> ## Author: Will Zhou <[email protected]>
> ## Date: 09/01 2011
>
> import maya.OpenMaya as OpenMaya
> import maya.OpenMayaRender as OpenMayaRender
>
>
> image = OpenMaya.MImage()
> #image.readFromFile(r"d:\devroot\lena.jpg")
> image.readFromFile(r"D:\devroot\Chrysanthemum.jpg")
> wScriptUtil = OpenMaya.MScriptUtil()
> widthPtr = wScriptUtil.asUintPtr()
> hScriptUtil = OpenMaya.MScriptUtil()
> heightPtr = hScriptUtil.asUintPtr()
> scriptUtil.setUint(widthPtr, 1)
> scriptUtil.setUint(heightPtr, 1)
> image.getSize(widthPtr, heightPtr)
> width = scriptUtil.getUint(widthPtr)
> height = scriptUtil.getUint(heightPtr)
> print width, height
>
> size = width * height
>
> charPixelPtr = image.pixels()
>
> OpenMayaRender.MRenderView.startRender(width, height)
>
> for i in range(0, size):
>     redIndex = (i*4) + 0
>     greenIndex = (i*4) + 1
>     blueIndex = (i*4) + 2
>     alphaIndex = (i*4) + 3
>     red = scriptUtil.getUcharArrayItem(charPixelPtr, redIndex)
>     green = scriptUtil.getUcharArrayItem(charPixelPtr, greenIndex)
>     blue = scriptUtil.getUcharArrayItem(charPixelPtr, blueIndex)
>     alpha = scriptUtil.getUcharArrayItem(charPixelPtr, alphaIndex)
>
>     # FIXME: {
>     y = int(i/width)
>     x = int(i-y*width)
>
>     rv_pixels = OpenMayaRender.RV_PIXEL()
>     rv_pixels.a = alpha
>     rv_pixels.r = red
>     rv_pixels.g = green
>     rv_pixels.b = blue
>
>     if OpenMayaRender.MRenderView.doesRenderEditorExist():
>         OpenMayaRender.MRenderView.updatePixels(x, x, y, y, rv_pixels)
>      # END FIXME: }
>
>     OpenMayaRender.MRenderView.refresh(x, x, y, y)
> #OpenMayaRender.MRenderView.refresh(0, width-1, 0, height-1)
> OpenMayaRender.MRenderView.endRender()
>
> ############# CODE END #################
>
> Regards,
> Will
>
>

-- 
view archives: http://groups.google.com/group/python_inside_maya
change your subscription settings: 
http://groups.google.com/group/python_inside_maya/subscribe

Reply via email to