#include <X11/Xatom.h>
#include <stdio.h>
#include <stdarg.h>
+#include <stdint.h>
#include "filter.h"
void PV_ExtractStill( TrformStr *TrPtr );
void PV_SetInvMakeParams( struct fDesc *stack, struct MakeParams *mp, Image *im , Image *pn );
-int SetUpAtan();
-int SetUpSqrt();
-int SetUpMweights();
void DrawWindow();
void DrawView(int InterPolator);
+int readJPEG ( Image *im, fullPath *sfile );
+
int panning = FALSE;
int zooming_in = FALSE;
int zooming_out = FALSE;
int main( int argc, char** argv )
{
- KeySym key;
XSizeHints hint;
unsigned long fg, bg;
int done;
if( depth != 24 )
{
PrintError("Depth = %d, must be 24 pixels", (int)depth);
- exit(0);
}
bg = WhitePixel(disp,screen);
fg = BlackPixel(disp,screen);
pano.hfov = 360.0;
pano.format = _equirectangular;
- // Initialize Look-up tables
-
- if( SetUpAtan() || SetUpSqrt() || SetUpMweights() )
- {
- PrintError("Could not set up LU Tables");
- exit(0);
- }
-
// Set up viewer window
SetImageDefaults( &view );
- visual = DefaultVisual(disp, screen);
+ visual = DefaultVisual(disp, screen);
- ximage = XCreateImage(disp, visual, depth, ZPixmap, 0,
- NULL, view.width, view.height,
- 8, 0);
+ ximage = XCreateImage(disp, visual, depth, ZPixmap, 0,
+ NULL, view.width, view.height,
+ 8, 0);
memset( *(view.data), 0, view.dataSize);
ximage->data = (char *)*(view.data);
ximage->byte_order= MSBFirst;
-
+
done = 0;
while( done==0)
XFreeGC(disp,gc);
XDestroyWindow(disp, win);
XCloseDisplay(disp);
+
+ return (0);
}
im->dataSize = im->height * im->bytesPerLine;
}
+static int copy_rgb_to_zpixmap (XImage *dest, const Image *src)
+{
+ uint32_t *src_data;
+
+ uint32_t src_r;
+ uint32_t src_g;
+ uint32_t src_b;
+
+ uint32_t dest_r;
+ uint32_t dest_g;
+ uint32_t dest_b;
+ uint32_t dest_pixel_value;
+
+ uint32_t x;
+ uint32_t y;
+ uint32_t pixel;
+
+ uint32_t dest_r_maxval;
+ uint32_t dest_g_maxval;
+ uint32_t dest_b_maxval;
+
+ uint32_t dest_r_offset;
+ uint32_t dest_g_offset;
+ uint32_t dest_b_offset;
+
+ dest_r_offset = 0;
+ dest_g_offset = 0;
+ dest_b_offset = 0;
+ dest_r_maxval = dest->red_mask;
+ dest_g_maxval = dest->green_mask;
+ dest_b_maxval = dest->blue_mask;
+ for (x = 0; x < dest->depth; x++)
+ {
+ if ((dest_r_maxval & 0x01) == 0)
+ {
+ dest_r_offset++;
+ dest_r_maxval >>= 1;
+ }
+ if ((dest_g_maxval & 0x01) == 0)
+ {
+ dest_g_offset++;
+ dest_g_maxval >>= 1;
+ }
+ if ((dest_b_maxval & 0x01) == 0)
+ {
+ dest_b_offset++;
+ dest_b_maxval >>= 1;
+ }
+ }
+ src_data = (uint32_t *) *src->data;
+
+ pixel = 0;
+ for (y = 0; y < dest->height; y++)
+ {
+ for (x = 0; x < dest->width; x++, pixel++)
+ {
+ int32_t bytenum;
+
+ src_r = (src_data[pixel] >> 8) & 0xFF;
+ src_g = (src_data[pixel] >> 16) & 0xFF;
+ src_b = (src_data[pixel] >> 24) & 0xFF;
+
+ dest_r = dest_r_maxval * src_r / 0xFF;
+ dest_g = dest_g_maxval * src_g / 0xFF;
+ dest_b = dest_b_maxval * src_b / 0xFF;
+
+ dest_pixel_value = 0
+ | ((dest_r << dest_r_offset) & dest->red_mask)
+ | ((dest_g << dest_g_offset) & dest->green_mask)
+ | ((dest_b << dest_b_offset) & dest->blue_mask);
+
+ for (bytenum = 0; bytenum < (dest->depth / 8); bytenum++)
+ {
+ dest->data[(pixel * dest->bits_per_pixel / 8) + bytenum] =
+ (dest_pixel_value >> (dest->bits_per_pixel - (8 * (bytenum + 1)))) & 0xFF;
+ }
+ }
+ }
+
+ return (0);
+} /* int copy_rgb_to_zpixmap */
void DrawWindow()
{
myfree((void**)view.data);
view.width = xa.width;
view.height = xa.height;
- view.bytesPerLine = view.width * view.bitsPerPixel / 8;
- view.dataSize = view.bytesPerLine * view.height;
- view.format = 1;
- view.data = (unsigned char**)mymalloc( view.dataSize );
- if(view.data == NULL)
- {
- PrintError("Not enough memory");
- exit(0);
- }
-
- ximage = XCreateImage(disp, visual, depth, ZPixmap, 0,
- NULL, view.width, view.height,
- 8, 0);
- ximage->data = (char *)*(view.data);
- ximage->byte_order= MSBFirst;
+ view.bytesPerLine = view.width * view.bitsPerPixel / 8;
+ view.dataSize = view.bytesPerLine * view.height;
+ view.format = 1;
+ view.data = (unsigned char**)mymalloc( view.dataSize );
+ if(view.data == NULL)
+ {
+ PrintError("Not enough memory");
+ exit(0);
+ }
+
+ ximage = XCreateImage(disp, visual, depth, ZPixmap, 0,
+ NULL, view.width, view.height,
+ 8, 0);
+ ximage->data = (char *)*(view.data);
+ ximage->byte_order= MSBFirst;
}
if( view.format )
{
else
DrawView(_bilinear);
}
-
+
+ ximage->data = (char *) malloc (view.dataSize);
+ if (ximage->data == NULL)
+ return;
+ memcpy (ximage->data, *(view.data), view.dataSize);
+
+ copy_rgb_to_zpixmap (ximage, &view);
+
XPutImage(disp, win, gc, ximage, 0, 0, 0, 0, view.width, view.height);
+
+ free (ximage->data);
+ ximage->data = NULL;
}
void DrawView(int InterPolator)