As far as I know there is no simple way to get the color of a particle. In the case you have an object with UV's and 1 image texture defining the color you should be able to get the color.
The following example is for BI and assumes you only have 1 UV map, the texture is in slot 1 and there is only 1 particle system and 1 modifier (the modifier for the particle system) on the object.
import bpy
from mathutils import Color
def get_pixel_color(img, x, y):
# Get the 'index' of the pixel. Pixels are stored as one big list of
# numbers. The R, G, B and A value for every pixel, one after the other.
pixel_i = y * img.size[0] * 4 + x * 4
pixel_col = img.pixels[pixel_i:pixel_i + 4]
# Return the color as Color object, which doesn't have alpha info.
return Color((pixel_col[:-1]))
def get_uv_color(img, uv):
# Get the x and y coordinates of the pixel for the given uv coordinate.
pixel_x = int(uv.x * img.size[0])
pixel_y = int(uv.y * img.size[1])
uv_col = get_pixel_color(img, pixel_x, pixel_y)
return uv_col
def get_particle_color(p, ps, ps_mod):
p_uv = ps.uv_on_emitter(ps_mod, p)
p_mat = bpy.data.materials[ps.settings.material_slot]
p_mat_tex = p_mat.texture_slots[0].texture
p_mat_img = p_mat_tex.image
p_col = get_uv_color(p_mat_img, p_uv)
return p_col
obj = bpy.context.object # The object with the particle system
ps = obj.particle_systems[0] # The particle system you need to query
ps_mod = obj.modifiers[0] # The modifier for the particle system
p = ps.particles[0] # The first particle
p_col = get_particle_color(p, ps, ps_mod)
For Cycles (assuming that there is only 1 Image Texture node in the Shading Node Tree) you should change the get_particle_color
function. The statement for p_mat_tex
should be changed to:
p_mat_tex = p_mat.node_tree.nodes['Image Texture']