(обновление: проблема 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.
Чего здесь не хватает?