11 #include <NCSECWClient.h>
12 #include <NCSErrors.h>
14 uint_fast8_t const bands
= 3;
19 uint_fast16_t WX
= 200, WY
= 200;
23 if (e != NCS_SUCCESS) { \
24 printf("Error = %s\n", NCSGetErrorText(e)); \
27 NCSEcwReadStatus
showcb(NCSFileView
*fw
) {
29 NCSFileViewSetInfo
*vi
;
31 NCS(NCScbmGetViewInfo(fw
, &vi
));
33 //printf("X %i Y %i avblks %i avblk %i mblk %i vblk %i\n", vi->nSizeX, vi->nSizeY, vi->nBlocksAvailableAtSetView, vi->nBlocksAvailable, vi->nMissedBlocksDuringRead, vi->nBlocksInView);
34 uint_fast32_t bpl
= vi
->nSizeX
* 4;
35 uint8_t *img
= malloc(bands
* vi
->nSizeY
* bpl
);
38 uint8_t *img_
= img
, *img__
= malloc(bands
* bpl
);
39 for (uint_fast32_t y
= vi
->nSizeY
; y
!= 0; y
--) {
40 NCSEcwReadStatus s
= NCScbmReadViewLineBGR(fw
, img__
);
42 for (uint_fast32_t x
= 0; x
< vi
->nSizeX
; x
++) {
43 img_
[x
* 4] = img__
[x
* 3];
44 img_
[x
* 4 + 1] = img__
[x
* 3 + 1];
45 img_
[x
* 4 + 2] = img__
[x
* 3 + 2];
47 //printf("status %i\n", s);
53 //printf("%i %i %i\n", DefaultDepth(D, S), WX, WY);
55 XImage
*xi
= XCreateImage(D
, DefaultVisual(D
, S
), DefaultDepth(D
, S
), ZPixmap
, 0, (void *)img
, vi
->nSizeX
, vi
->nSizeY
, 32, bpl
);
57 XPutImage(D
, W
, Gc
, xi
, 0, 0, 0, 0, WX
, WY
);
61 return NCSECW_READ_OK
;
64 int main(int argc
, char *argv
[]) {
65 if (argc
< 2) return 1;
68 D
= XOpenDisplay(NULL
);
71 W
= XCreateSimpleWindow(D
, RootWindow(D
, S
), 10, 10, WX
, WY
, 1,
72 BlackPixel(D
, S
), WhitePixel(D
, S
));
73 Gc
= DefaultGC(D
, S
); //XCreateGC(D, W, 0, 0);
75 XSelectInput(D
, W
, ExposureMask
| KeyPressMask
| StructureNotifyMask
);
81 NCSFileViewFileInfo
*fi
;
82 NCSFileViewSetInfo
*si
;
83 NCS(NCScbmOpenFileView(argv
[1], &fw
, showcb
));
84 NCS(NCScbmGetViewFileInfo(fw
, &fi
));
85 printf("%i bands\n", fi
->nBands
);
86 NCS(NCScbmGetViewInfo(fw
, &si
));
87 uint32_t *bl
= malloc(4 * bands
);
88 for (uint_fast8_t i
= 0; i
< bands
; i
++)
91 uint_fast32_t x
= 0, y
= 0, w
= fi
->nSizeX
- 1, h
= fi
->nSizeY
- 1;
92 // NCS(NCScbmSetFileView(fw, 3, bl, x, y, w, h, WX, WY));
100 // XFillRectangle(D, W, DefaultGC(D, S), 20, 20, 10, 10);
102 case ConfigureNotify
:
103 WX
= ev
.xconfigure
.width
;
104 WY
= ev
.xconfigure
.height
;
105 //NCS(NCScbmSetFileView(fw, bands, bl, x, y, w, h, WX, WY));
109 KeySym ks
= XKeycodeToKeysym(D
, (KeyCode
)ev
.xkey
.keycode
, 0);
135 printf("zoom %lf%%\n", 100.0 * w
/ fi
->nSizeX
);
142 printf("zoom %lf%%\n", 100.0 * (w
+ 1) / fi
->nSizeX
);
145 printf("zoom %lf%%\n", 100.0 * (w
+ 1) / fi
->nSizeX
);
151 printf("keysym %lx\n", ks
);
153 NCS(NCScbmSetFileView(fw
, bands
, bl
, x
, y
, w
+ x
, h
+ y
, WX
, WY
));