I tried that and it did not work.  I have verified that if I draw a smaller 
image on top of the new, I can see that.  But even with using RGBA, I only 
see the last image if the sizes are the same.  Here is a more expanded 
example of what I am trying to do.

---

import pyglet
import pyglet.gl
import ctypes
import itertools
import numpy as np
import cv2

pyglet.gl.glEnable(pyglet.gl.GL_BLEND)
pyglet.gl.glBlendFunc(pyglet.gl.GL_SRC_ALPHA,pyglet.gl.GL_ONE_MINUS_SRC_ALPHA)

image = np.zeros((50, 50, 4), np.uint8) # type(image) = numpy.ndarray

pt1 = (12, 1)
pt2 = (48, 24)
pt3 = (12, 48)
pt4 = (1, 24)
pt5 = (1, 26)
pt6 = (48, 26)
pt7 = (48, 24)

triangle_cnt = np.array([pt1, pt2, pt3])
cv2.drawContours(image, [triangle_cnt], 0, (100, 255, 100, 255), -1)
image = image.tolist()
px = list(itertools.chain(*list(itertools.chain(*image))))

rawData = (ctypes.c_ubyte * len(px))(*px)
player_image = pyglet.image.ImageData(50, 50, 'RGBA', rawData).get_texture()

image2 = np.zeros((50, 50, 4), np.uint8)
rect_cnt = np.array([pt4, pt5, pt6, pt7])
cv2.drawContours(image2, [rect_cnt], 0, (100, 255, 100, 255), -1)
image2 = image2.tolist()
px2 = list(itertools.chain(*list(itertools.chain(*image2))))

rawData2 = (ctypes.c_ubyte * len(px2))(*px2)
rect = pyglet.image.ImageData(50, 50, 'RGBA', rawData2) 

player_image.blit_into(rect, 0, 0, 0)

---

When I display player_image, I only see the thin rectangle.  What am I 
doing wrong?

My goal is to change images for sprites during a simulation depending on 
simulation events.  If you know a better way to accomplish this, I would 
like to hear it.

On Wednesday, March 11, 2020 at 7:49:46 PM UTC-4, Charles M wrote:
>
> Your images have no transparency (RGB). You need will need to specify an 
> alpha channel to do transparency: RGBA and a fourth value for each pixel.
>
>
> On Wednesday, March 11, 2020 at 5:57:27 PM UTC-5, Jonathon Parker wrote:
>>
>> In my test the images are the same size, but I thought the background was 
>> transparent.  Any way to specify a background color is transparent?  Or is 
>> there a better way to layer images?
>>
>> On Wednesday, March 11, 2020 at 6:44:00 PM UTC-4, Charles M wrote:
>>>
>>> This is normal behavior, blit overwrites the pixel data with new data 
>>> you are providing. Which in this case is an entirely new image.
>>>
>>> On Wednesday, March 11, 2020 at 2:34:15 PM UTC-5, Jonathon Parker wrote:
>>>>
>>>> A minimal example
>>>>
>>>> # rawdata1 and rawdata2 are a list of c_ubytes
>>>>
>>>> my_texture_region = pyglet.image.ImageData(x, y, 'RGB', 
>>>> rawdata1).get_texture()
>>>> my_image = pyglet.image.ImageData(x, y, 'RGB', rawdata2)
>>>> my_texture_region.blit_into(my_image, 0, 0, 0)
>>>>
>>>> When I create a sprite using my_texture region, I only see my_image.  
>>>> What I want is my_image on top of my_texture_region.
>>>>
>>>> What am I doing wrong?
>>>>
>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"pyglet-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to pyglet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/pyglet-users/716fffbd-584a-47ee-b1ad-2bbf64b3605f%40googlegroups.com.

Reply via email to