LoginSignup
1
0

mayaでテクスチャから色を拾いたい

Posted at

テクスチャの特定の位置から色を引き出したいなと。

色々調べててなんとかヒットしたページを参考にやってみました。

考え方

参考にさせて頂いた内容を見て・・・

-テクスチャを読み込む
-テクスチャをbyteArrayに変換する
-特定の位置の数値を取得する

テクスチャをbyteArrayにした場合には

r,g,b,a,r,g,b,a,r,g,b,a,r,g,b,a,r,g,b,a,.......

という順で並んでいくので、4つのデータで1ピクセルの色情報になってる

という感じ?

4ピクセルで試す

写経しつつ、挙動を確認する為にこんな画像でテストしてみる。
スタートが左上か左下かもわからないので、結果で判断しやすくしてみる。

colorTest.png

拡大するとこんな感じ
image.png

import maya.OpenMaya
import os
def getColor(filePath):        
    img = maya.OpenMaya.MImage()
    img.readFromFile(filePath)
    
    w = maya.OpenMaya.uIntPtr()
    h = maya.OpenMaya.uIntPtr()
    img.getSize(w, h)
        
    charPixelPtr = img.pixels()
    util = maya.OpenMaya.MScriptUtil()
    
    for i in range(0,4):
        byteIndex = i *4        
        r = util.getUcharArrayItem(charPixelPtr, byteIndex)
        g = util.getUcharArrayItem(charPixelPtr, byteIndex+1)
        b = util.getUcharArrayItem(charPixelPtr, byteIndex+2)
        a = util.getUcharArrayItem(charPixelPtr, byteIndex+3)
        print([r/255.0, g/255.0, b/255.0, a/255.0])
    
filePath = "D:/colorTest.png"
getColor(filePath)

結果はこんな感じ

[0.0, 0.0, 1.0, 1.0]
[1.0, 1.0, 1.0, 1.0]
[1.0, 0.0, 0.0, 1.0]
[0.0, 1.0, 0.0, 1.0]

左下 -> 右下 -> 左上 -> 右上

の順番ですね

座標指定

座標を指定したらそれを
左下スタートのピクセルの順番に変換して
4倍にすればどうじゃろか

import maya.OpenMaya
import os

def getColor(filePath,posX,posY):        
    img = maya.OpenMaya.MImage()
    img.readFromFile(filePath)
    
    w = maya.OpenMaya.uIntPtr()
    h = maya.OpenMaya.uIntPtr()
    img.getSize(w, h)

    byteIndex = posX + (posY * w.value())
    byteIndex = byteIndex *4
        
    charPixelPtr = img.pixels()
    util = maya.OpenMaya.MScriptUtil()
    r = util.getUcharArrayItem(charPixelPtr, byteIndex)
    g = util.getUcharArrayItem(charPixelPtr, byteIndex+1)
    b = util.getUcharArrayItem(charPixelPtr, byteIndex+2)
    a = util.getUcharArrayItem(charPixelPtr, byteIndex+3)

    return [r/255.0, g/255.0, b/255.0, a/255.0]
    
filePath = "D:/colorTest.png"
getColor(filePath,0,1)

# Result: [1.0, 0.0, 0.0, 1.0] # 

赤とれましたね。
UV座標から取れるようになったらもっと便利だろうなぁと思いつつ、
一旦おしまい。

参考

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0