Как мне получить этот вызов X Windows .XGetImage? - PullRequest
0 голосов
/ 01 апреля 2020

(обновление: проблема XGetPixel была решена благодаря Дэвиду)

Я практикую некоторые задачи из rosettacode.org для Standard ML, и я застрял с вызовом XGetImage из X Windows (PolyML ) Я получаю ошибку badValue за каждую попытку в формате XYPixmap. То, что я сделал, было

 open XWindows ;
 val disp =  XOpenDisplay "" ;
 val win = XCreateSimpleWindow (RootWindow disp) origin (Area {x=0,y=0,w=300,h=100}) 2 0 0xffffff ;
 XMapWindow win; 
 XFlush disp ;
 XGetImage win (Area {x=0,y=0,w=100,h=100}) AllPlanes XYPixmap ;

Вызов XGetImage возвращает

 X Error BadValue in XGetImage
 Exception- XWindows "XGetImage failed" raised

Источник x windows. cpp не делает меня намного мудрее:

 XImage *image = XGetImage(d,drawable,x,y,w,h,mask,CImageFormat(format));
 if (image == 0) RaiseXWindows(taskData, "XGetImage failed");

ZPixmap + XGetPixel отлично работают в самой последней поливерсии, остальная часть этого поста была решена:

Когда я пробую ZPixmap, я получаю

 val im = XGetImage win (Area {x=0,y=0,w=1,h=1}) AllPlanes  ZPixmap ;
val im =
   XImage
    {bitmapBitOrder = MSBFirst, bitmapPad = 32, bitmapUnit = 32,
     bitsPerPixel = 1, byteOrder = MSBFirst, bytesPerLine = 4, data =
     ImageData
      "\^A\^@\^@\^@ ... repeat 22 x .... \^A\^@\^@\^@",
     depth = 24, format = ZPixmap, size =
     Rect {bottom = 1, left = 0, right = 1, top = 0}, ...}

но

XGetPixel disp im (XPoint {x=0,y=0}) ;

вылетает PolyML

Пример XGetImage (в C) в главе 6.4.2 Руководства по программированию Xlib, похоже, не делает ничего особенного, просто используйте дисплей и видимое окно. Мой выигрыш окна виден. Я также попробовал окно root, и это тоже не работает. Я думаю, что правильно выполнил руководство PolyML для X.

Чего здесь не хватает?

1 Ответ

0 голосов
/ 02 апреля 2020

Кажется, в коде, который реализовал XGetPixel в Poly / ML, была ошибка. Теперь есть исправление в репозитории github . Я недостаточно знаком с X- windows, чтобы сказать, должен ли он работать с XYPixmap.

...