c'est dans un contexte artistique que je tente de résoudre un pb à propos d'image-pixel.
J'ai trouvé deux script intéressant à ce propos, mais la méthode pour aboutir au résultat souhaité me manque.
L'utilisation se fait avec une image de 8x8 pixel, à éditer dans le panneau texture.
Dans le premier script, les pixel sont mis en objet avec chacun leur couleurs (par object.color), mais sous un Matériel unique.
>>> bpy.context.object.color[:]
(0.9529412388801575, 0.9529412388801575, 0.9529412388801575, 1.0)
L'utilisation se fait avec une image de 8x8 pixel, à éditer dans le panneau texture.
- Code : Tout sélectionner
import bpy
D = bpy.data
# Specify your image here, open it inside Blender Image Editor texture panel
image_file = 'tiny_8x8.png'
img = D.images[image_file]
pixels = list(img.pixels)
grouped_list = [pixels[ipx:ipx+4] for ipx in range(0, len(pixels), 4)]
# Get width and height of image (in pixel)
w = width = img.size[0]
h = height = img.size[1]
print("------LENGTH------")
print( len(img.pixels)//4)
print("------PIXEL------")
print(pixels)
print("---GROUPED-PIXEL---")
print(len(grouped_list))
# Create LIST of GRID XY value
rowColList=[]
for i in range(height):
for j in range(width):
rowColList.append(i)
rowColList.append(j)
# SPLIT the LIST of XY
origList = rowColList
splitList = [origList[i:i+2] for i in range(0,len(origList),2)]
# Create a single material that respect Object Color
mat = bpy.data.materials.new('PixelObjectColorMat')
mat.use_object_color = True
for number in range(len(grouped_list)):
# Separate RGBA into each own variables
r = grouped_list[number][0]
g = grouped_list[number][1]
b = grouped_list[number][2]
a = grouped_list[number][3]
# Separate XY coordinate
x=splitList[number][0]
y=splitList[number][1]
# Create cube at location XY
bpy.ops.mesh.primitive_cube_add(location=(x-width/2, y-width/2, 0))
selectedObject = bpy.context.selected_objects
mesh = selectedObject[0]
mesh.name = 'pixelcube.%s' % number
mesh.scale = 0.5, 0.5, 0.05
# Keep list of our mesh for further processing, this is one big array
#pixelCubeObjects.append(mesh)
# bpy.data.objects[pixel'cube.1022']
# Apply our special Material
bpy.context.object.data.materials.append(mat)
# Assign RGBA color to Object Color
mesh.color = r,g,b,a
# Print the chatter progress
print ('PixelCube {number} created at:'.format(number=number), x, y, ', with RGB color', r, g, b)
Le second script est une méthode pour sélectionner les objets par matériel (par diffuse_color).
- Code : Tout sélectionner
import bpy
col = bpy.context.object.data.materials[0].diffuse_color
mess = [o for o in bpy.context.scene.objects if o.type == 'MESH']
for obj in mess:
list = []
for mat in obj.data.materials:
try: list.append(mat.diffuse_color)
except: pass
obj.select = col in list
Ce qui m'intéresse c'est de pouvoir sélectionner par couleur les objets Pixels, et les joindre, afin de changer leur matériel, ou leur couleur diffuse par exemple.
Ainsi je souhaiterais connaître votre approche pour arriver à mes fins sur ces bases de script, mon approche étant :
Insérer dans le premier script la création de couleur par objet, au lieu de matérial unique, mais comment ?
Merci pour votre intérêt porté à ce message
Albun