テクスチャの特定の位置から色を引き出したいなと。
色々調べててなんとかヒットしたページを参考にやってみました。
考え方
参考にさせて頂いた内容を見て・・・
-テクスチャを読み込む
-テクスチャを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ピクセルで試す
写経しつつ、挙動を確認する為にこんな画像でテストしてみる。
スタートが左上か左下かもわからないので、結果で判断しやすくしてみる。
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座標から取れるようになったらもっと便利だろうなぁと思いつつ、
一旦おしまい。
参考