3
우선 컨텍스트 비트입니다.numpy 배열의 서브 배열을 스왑합니다.
카이로 (실제로는 pycairo)을 사용하여 Gdk (실제로 pygtk) pixbuf를 그리려합니다. 내 원래의 코드는 다음과 모습이 그냥 작동하는 것처럼 내가 대신 검은 색 텍스트의 색상을 그리는 시도까지 한 번 들어
import cairo as C
import gtk.gdk as GG
FMT = C.FORMAT_ARGB32
CSP = GG.COLORSPACE_RGB
st = C.ImageSurface.format_stride_for_width(FMT, zw)
surf = C.ImageSurface(FMT, zw, zh)
c = C.Context(surf)
# draw into c here ...
pixels = surf.get_data()
return GG.pixbuf_new_from_data(pixels, CSP, True, 8, zw, zh, st)
, 그것은, 보았다. 그것은 두 개의 라이브러리과 같이, 바이트 순서에 맞지 나온다 :
# !!! FIXME !!! cairo ARGB surfaces and gdk pixbufs disagree on bytesex:
# cairo: LSB --> B G R A <-- MSB
# gdk: LSB --> R G B A <-- MSB
# !!! WTF !!!
적색 및 청색 채널 화상 (화면으로 pixbuf에서 블리트 후) :-(스와핑 결과
.
def changesex(data):
i0 = 0
i2 = 2
l = len(data)
while i2 < l:
temp = data[i0]
data[i0] = data[i2]
data[i2] = temp
i0 += 4
i2 += 4
하지만 NumPy와를 수 사용하여 생각 : 나는 (내가 원하는대로) pixbufs를 계속 사용한다면, 나는 모든 세번째로 모든 1 바이트를 교환 데이터, 를 후 처리 할 필요가 나는 일반 파이썬에서 작업을 수행 할 수 있습니다 근심이있다 TER a는이 내장되어있는 경우 운영자과 같이 C. 뭔가 작성이를 위해 :
a = np.frombuffer(data, dtype=np.uint8)
a.shape = (len(data)/4, 4)
temp = a[:,0]
a[:,0] = a[:,2]
a[:,2] = temp
난 그냥 꿈이 있습니까? 주목 a
그래를, 나는 시행 착오와 진행의 조합을 통해에 의해 자신이 발견 비슷한 질문이 여기에 있습니다. 그래도 고마워! 나를위한 – BehemothTheCat
재 배열 = a [:, :, [2,1,0,3]]는 추가 모양 명령없이 작동했습니다. –