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.