Changeset 25289
- Timestamp:
- Sep 8, 2009, 4:23:10 PM (17 years ago)
- Location:
- branches/eam_branches/20090715/Ohana/src/kapa2/src
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/eam_branches/20090715/Ohana/src/kapa2/src/Remap16.c
r18324 r25289 1 1 # include "Ximage.h" 2 # define OUT_TYPE unsigned short 2 3 3 4 # define MY_SWAP_BYTE(W) { \ … … 10 11 int i, j, ii, jj; 11 12 int i_start, i_end, j_start, j_end; 12 int dropback; 13 int I_start, J_start; 14 int dropback, inDX, inDY; 13 15 int dx, dy, DX, DY; 14 16 double expand, Ix, Iy; 15 17 int expand_in, expand_out; 16 unsigned short*out_pix, *out_pix2, *data;18 OUT_TYPE *out_pix, *out_pix2, *data; 17 19 unsigned short *in_pix, *in_pix2; 18 unsigned short*pixel, pixvalue;19 unsigned shortback;20 OUT_TYPE *pixel, pixvalue; 21 OUT_TYPE back; 20 22 int swap_client, swap_server, swap_bytes; 21 23 22 ALLOCATE (pixel, unsigned short, graphic[0].Npixels); 24 // just skip if there is no data 25 if (matrix[0].Naxes == 0) return; 26 if (matrix[0].Naxis[0] == 0) return; 27 if (matrix[0].Naxis[1] == 0) return; 28 29 ALLOCATE (pixel, OUT_TYPE, graphic[0].Npixels); 23 30 24 31 # ifdef BYTE_SWAP … … 38 45 back = 0xffff & graphic[0].back; 39 46 if (swap_bytes) MY_SWAP_BYTE (back); 40 // XXX not certain this is the correct solution...41 47 42 48 // set up expansions … … 60 66 DY = matrix[0].Naxis[1]; 61 67 62 // x, y are the closest lit screen pixel to 0,0 63 Picture_Lower (&i_start, &j_start, matrix, picture); 68 // i_start, j_start are the closest lit screen pixel to 0,0 69 // I_start, J_start are the image pixel corresponding to i_start, j_start 70 Picture_Lower (&i_start, &j_start, &I_start, &J_start, matrix, picture); 64 71 65 // x, y are the closest lit screen pixel to dx, dy 66 Picture_Upper (&i_end, &j_end, matrix, picture); 72 // i_end, j_end are the closest lit screen pixel to dx, dy 73 // I_end, J_end are the image pixel corresponding to i_end, j_end 74 Picture_Upper (&i_end, &j_end, i_start, j_start, matrix, picture); 67 75 68 // Ix,Iy are the first displayed image pixel 69 Picture_to_Image (&Ix, &Iy, i_start, j_start, picture); 76 assert (i_start <= i_end); 77 assert (j_start <= j_end); 78 79 Ix = picture[0].flipx ? I_start - 1 : I_start; 80 Iy = picture[0].flipy ? J_start - 1 : J_start; 81 82 inDX = picture[0].flipx ? -1 : +1; 83 inDY = picture[0].flipy ? -1 : +1; 70 84 71 85 dropback = expand_out - (i_end - i_start) % expand_out; 72 86 if ((i_end - i_start) % expand_out == 0) dropback = 0; 73 87 74 data = out_pix = (unsigned short*) picture[0].data;88 out_pix = data = (OUT_TYPE *) picture[0].data; 75 89 in_pix = &image[0].pixmap[DX*(int)MAX(Iy,0) + (int)MAX(Ix,0)]; 76 90 … … 82 96 } 83 97 84 for (j = j_start; j < j_end; j+= expand_out, in_pix += expand_in*DX) {98 for (j = j_start; j < j_end; j+= expand_out, in_pix += inDY*expand_in*DX) { 85 99 out_pix = &data[j*dx]; 86 100 … … 97 111 in_pix2 = in_pix; 98 112 if (expand_out == 1) { 99 for (i = i_start; i < i_end; i++, in_pix2 +=expand_in, out_pix++) {113 for (i = i_start; i < i_end; i++, in_pix2 += inDX*expand_in, out_pix++) { 100 114 *out_pix = pixel[*in_pix2]; 101 115 } 102 116 } else { 103 for (i = i_start; i < i_end; i+= expand_out, in_pix2 ++, out_pix+= expand_out) {117 for (i = i_start; i < i_end; i+= expand_out, in_pix2 += inDX, out_pix+= expand_out) { 104 118 pixvalue = pixel[*in_pix2]; 105 119 out_pix2 = out_pix; … … 124 138 /**** fill in top area ****/ 125 139 out_pix = &data[j_end*dx]; 126 for (j = 0; j < (dy - j_end); j++) {140 for (j = 0; j < dy - j_end; j++) { 127 141 for (i = 0; i < dx; i++, out_pix++) { 128 142 *out_pix = back; -
branches/eam_branches/20090715/Ohana/src/kapa2/src/Remap24.c
r18324 r25289 5 5 int i, j, ii, jj; 6 6 int i_start, i_end, j_start, j_end; 7 int dropback, extra; 7 int I_start, J_start; 8 int dropback, extra, inDX, inDY; 8 9 int dx, dy, DX, DY; 9 10 double expand, Ix, Iy; … … 53 54 extra = 4 - (dx * 3) % 4; 54 55 55 // x, y are the closest lit screen pixel to 0,0 56 Picture_Lower (&i_start, &j_start, matrix, picture); 56 // i_start, j_start are the closest lit screen pixel to 0,0 57 // I_start, J_start are the image pixel corresponding to i_start, j_start 58 Picture_Lower (&i_start, &j_start, &I_start, &J_start, matrix, picture); 57 59 58 // x, y are the closest lit screen pixel to dx, dy 59 Picture_Upper (&i_end, &j_end, matrix, picture); 60 // i_end, j_end are the closest lit screen pixel to dx, dy 61 // I_end, J_end are the image pixel corresponding to i_end, j_end 62 Picture_Upper (&i_end, &j_end, i_start, j_start, matrix, picture); 60 63 61 // Ix,Iy are the first displayed image pixel 62 Picture_to_Image (&Ix, &Iy, i_start, j_start, picture); 64 assert (i_start <= i_end); 65 assert (j_start <= j_end); 66 67 Ix = picture[0].flipx ? I_start - 1 : I_start; 68 Iy = picture[0].flipy ? J_start - 1 : J_start; 69 70 inDX = picture[0].flipx ? -1 : +1; 71 inDY = picture[0].flipy ? -1 : +1; 63 72 64 73 dropback = expand_out - (i_end - i_start) % expand_out; … … 80 89 } 81 90 82 for (j = j_start; j < j_end; j+= expand_out, in_pix += expand_in*DX) {91 for (j = j_start; j < j_end; j+= expand_out, in_pix += inDY*expand_in*DX) { 83 92 out_pix = &data[j*(3*dx+extra)]; 84 93 … … 97 106 in_pix2 = in_pix; 98 107 if (expand_out == 1) { 99 for (i = i_start; i < i_end; i++, in_pix2+= expand_in, out_pix+=3) {108 for (i = i_start; i < i_end; i++, in_pix2+= inDX*expand_in, out_pix+=3) { 100 109 out_pix[0] = pixel1[*in_pix2]; 101 110 out_pix[1] = pixel2[*in_pix2]; … … 103 112 } 104 113 } else { 105 for (i = i_start; i < i_end; i+= expand_out, in_pix2 ++, out_pix+= 3*expand_out) {114 for (i = i_start; i < i_end; i+= expand_out, in_pix2 += inDX, out_pix+= 3*expand_out) { 106 115 pixvalue1 = pixel1[*in_pix2]; 107 116 pixvalue2 = pixel2[*in_pix2]; … … 121 130 /**** fill in area to the right of the picture ****/ 122 131 for (jj = 0; (jj < expand_out) && (j + jj < dy); jj++) { 123 // for (jj = 0; jj < expand_out; jj++) {124 132 out_pix2 = out_pix + jj*(3*dx+extra); 125 133 for (i = i_end; i < dx; i++, out_pix2+=3) { -
branches/eam_branches/20090715/Ohana/src/kapa2/src/Remap32.c
r18324 r25289 1 1 # include "Ximage.h" 2 # define OUT_TYPE unsigned int 2 3 3 4 # define MY_SWAP_INT(A,B) { int tmp; tmp = A; A = B; B = tmp; } 4 5 5 # define MY_SWAP_WORD(W) { \6 char tmp, *X;\7 X = (char *) &W;\8 tmp = X[0]; X[0] = X[3]; X[3] = tmp;\9 tmp = X[1]; X[1] = X[2]; X[2] = tmp; }6 # define MY_SWAP_WORD(W) { \ 7 char tmp, *X; \ 8 X = (char *) &W; \ 9 tmp = X[0]; X[0] = X[3]; X[3] = tmp; \ 10 tmp = X[1]; X[1] = X[2]; X[2] = tmp; } 10 11 11 12 void Remap32 (Graphic *graphic, KapaImageWidget *image, Picture *picture, Matrix *matrix) { … … 13 14 int i, j, ii, jj; 14 15 int i_start, i_end, j_start, j_end; 16 int I_start, J_start; 15 17 int dropback, inDX, inDY; 16 18 int dx, dy, DX, DY; 17 19 double expand, Ix, Iy; 18 20 int expand_in, expand_out; 19 unsigned int *out_pix, *out_pix2;21 OUT_TYPE *out_pix, *out_pix2, *data; 20 22 unsigned short *in_pix, *in_pix2; 21 unsigned long*pixel, pixvalue;22 unsigned longback;23 OUT_TYPE *pixel, pixvalue; 24 OUT_TYPE back; 23 25 int swap_client, swap_server, swap_bytes; 24 26 25 ALLOCATE (pixel, unsigned long, graphic[0].Npixels); 27 // just skip if there is no data 28 if (matrix[0].Naxes == 0) return; 29 if (matrix[0].Naxis[0] == 0) return; 30 if (matrix[0].Naxis[1] == 0) return; 31 32 ALLOCATE (pixel, OUT_TYPE, graphic[0].Npixels); 26 33 27 34 # ifdef BYTE_SWAP … … 43 50 44 51 // set up expansions 45 assert ((picture[0].expand >= 1) || (picture[0].expand <= - 1));52 assert ((picture[0].expand >= 1) || (picture[0].expand <= -2)); 46 53 expand = expand_in = expand_out = 1.0; 47 54 if (picture[0].expand > 0) { … … 62 69 DY = matrix[0].Naxis[1]; 63 70 64 // x, y are the closest lit screen pixel to 0,0 65 Picture_Lower (&i_start, &j_start, matrix, picture); 71 // i_start, j_start are the closest lit screen pixel to 0,0 72 // I_start, J_start are the image pixel corresponding to i_start, j_start 73 Picture_Lower (&i_start, &j_start, &I_start, &J_start, matrix, picture); 66 74 67 // x, y are the closest lit screen pixel to dx, dy 68 Picture_Upper (&i_end, &j_end, matrix, picture); 75 // i_end, j_end are the closest lit screen pixel to dx, dy 76 // I_end, J_end are the image pixel corresponding to i_end, j_end 77 Picture_Upper (&i_end, &j_end, i_start, j_start, matrix, picture); 69 78 70 if (i_end < i_start) MY_SWAP_INT (i_start,i_end);71 if (j_end < j_start) MY_SWAP_INT (j_start,j_end);79 assert (i_start <= i_end); 80 assert (j_start <= j_end); 72 81 73 // Ix,Iy are the first displayed image pixel 74 Picture_to_Image (&Ix, &Iy, i_start, j_start, picture); 75 Ix = MIN (MAX (0, Ix), DX - 1); 76 Iy = MIN (MAX (0, Iy), DY - 1); 77 // XXX not completely consistent with the i_start, i_end range... 78 79 // we need to offset because i_start points to the bottom edge of Ix 80 // if (picture[0].flipx) Ix -= 1.0; 81 // if (picture[0].flipy) Iy -= 1.0; 82 Ix = picture[0].flipx ? I_start - 1 : I_start; 83 Iy = picture[0].flipy ? J_start - 1 : J_start; 82 84 83 85 inDX = picture[0].flipx ? -1 : +1; … … 87 89 if ((i_end - i_start) % expand_out == 0) dropback = 0; 88 90 89 out_pix = (unsigned int*) picture[0].data;91 out_pix = data = (OUT_TYPE *) picture[0].data; 90 92 in_pix = &image[0].pixmap[DX*(int)MAX(Iy,0) + (int)MAX(Ix,0)]; 91 93 … … 97 99 } 98 100 99 for (j = j_start; j < j_end; j+= expand_out, out_pix+=(expand_out-1)*dx, in_pix += inDY*expand_in*DX) { 101 for (j = j_start; j < j_end; j+= expand_out, in_pix += inDY*expand_in*DX) { 102 out_pix = &data[j*dx]; 100 103 101 104 /**** fill in area to the left of the picture ****/ … … 126 129 } 127 130 out_pix -= dropback; 128 129 // assert (in_pix2 - image[0].pixmap <= DX*DY);130 // assert (in_pix2 - image[0].pixmap >= 0);131 // assert (in_pix - image[0].pixmap <= DX*DY);132 // assert (in_pix - image[0].pixmap >= 0);133 131 134 132 /**** fill in area to the right of the picture ****/ … … 139 137 } 140 138 } 141 out_pix += (dx - i_end);142 // assert (out_pix - (unsigned int *)picture[0].data <= dx*dy);143 // assert (out_pix - (unsigned int *)picture[0].data >= 0);144 139 } 145 146 if ((j_end - j_start) % expand_out > 0)147 out_pix -= expand_out - (j_end - j_start) % expand_out;148 149 // assert (out_pix - (unsigned int *)picture[0].data <= dx*dy);150 // assert (out_pix - (unsigned int *)picture[0].data >= 0);151 140 152 141 /**** fill in top area ****/ 153 for (j = 0; (j < dx*(dy - j_end)) && (out_pix - (unsigned int *)picture[0].data < dx*dy); j++, out_pix++) { 154 *out_pix = back; 142 out_pix = &data[j_end*dx]; 143 for (j = 0; j < dy - j_end; j++) { 144 for (i = 0; i < dx; i++, out_pix ++) { 145 *out_pix = back; 146 } 155 147 } 156 148 157 149 picture[0].pix = XCreateImage (graphic[0].display, graphic[0].visual, graphic[0].depth, ZPixmap, 0, 158 picture[0].data, picture[0].dx, picture[0].dy, 32, 0);150 picture[0].data, picture[0].dx, picture[0].dy, 32, 0); 159 151 160 152 free (pixel); -
branches/eam_branches/20090715/Ohana/src/kapa2/src/Remap8.c
r18324 r25289 1 1 # include "Ximage.h" 2 # define OUT_TYPE unsigned char 2 3 3 4 void Remap8 (Graphic *graphic, KapaImageWidget *image, Picture *picture, Matrix *matrix) { … … 5 6 int i, j, ii, jj; 6 7 int i_start, i_end, j_start, j_end; 7 int dropback; 8 int I_start, J_start; 9 int dropback, inDX, inDY; 8 10 int dx, dy, DX, DY; 9 11 double expand, Ix, Iy; 10 12 int expand_in, expand_out; 11 unsigned char *out_pix, *out_pix2;12 unsigned short *in_pix, *in_pix2;13 unsigned char*pixel, pixvalue;14 unsigned charback;13 OUT_TYPE *out_pix, *out_pix2, *data; 14 unsigned short *in_pix, *in_pix2; 15 OUT_TYPE *pixel, pixvalue; 16 OUT_TYPE back; 15 17 16 ALLOCATE (pixel, unsigned char, graphic[0].Npixels); 18 // just skip if there is no data 19 if (matrix[0].Naxes == 0) return; 20 if (matrix[0].Naxis[0] == 0) return; 21 if (matrix[0].Naxis[1] == 0) return; 22 23 ALLOCATE (pixel, OUT_TYPE, graphic[0].Npixels); 17 24 18 25 // local array for pixel values … … 44 51 DY = matrix[0].Naxis[1]; 45 52 46 // x, y are the closest lit screen pixel to 0,0 47 Picture_Lower (&i_start, &j_start, matrix, picture); 53 // i_start, j_start are the closest lit screen pixel to 0,0 54 // I_start, J_start are the image pixel corresponding to i_start, j_start 55 Picture_Lower (&i_start, &j_start, &I_start, &J_start, matrix, picture); 48 56 49 // x, y are the closest lit screen pixel to dx, dy 50 Picture_Upper (&i_end, &j_end, matrix, picture); 57 // i_end, j_end are the closest lit screen pixel to dx, dy 58 // I_end, J_end are the image pixel corresponding to i_end, j_end 59 Picture_Upper (&i_end, &j_end, i_start, j_start, matrix, picture); 51 60 52 // Ix,Iy are the first displayed image pixel 53 Picture_to_Image (&Ix, &Iy, i_start, j_start, picture); 61 assert (i_start <= i_end); 62 assert (j_start <= j_end); 63 64 Ix = picture[0].flipx ? I_start - 1 : I_start; 65 Iy = picture[0].flipy ? J_start - 1 : J_start; 66 67 inDX = picture[0].flipx ? -1 : +1; 68 inDY = picture[0].flipy ? -1 : +1; 54 69 55 70 dropback = expand_out - (i_end - i_start) % expand_out; 56 71 if ((i_end - i_start) % expand_out == 0) dropback = 0; 57 72 58 out_pix = (unsigned char*) picture[0].data;73 out_pix = data = (OUT_TYPE *) picture[0].data; 59 74 in_pix = &image[0].pixmap[DX*(int)MAX(Iy,0) + (int)MAX(Ix,0)]; 60 75 … … 66 81 } 67 82 68 for (j = j_start; j < j_end; j+= expand_out, out_pix+=(expand_out-1)*dx, in_pix += expand_in*DX) { 83 for (j = j_start; j < j_end; j+= expand_out, in_pix += inDY*expand_in*DX) { 84 out_pix = &data[j*dx]; 69 85 70 86 /**** fill in area to the left of the picture ****/ … … 80 96 in_pix2 = in_pix; 81 97 if (expand_out == 1) { 82 for (i = i_start; i < i_end; i++, in_pix2 +=expand_in, out_pix++) {98 for (i = i_start; i < i_end; i++, in_pix2 += inDX*expand_in, out_pix++) { 83 99 *out_pix = pixel[*in_pix2]; 84 100 } 85 101 } else { 86 for (i = i_start; i < i_end; i+= expand_out, in_pix2 ++, out_pix+= expand_out) {102 for (i = i_start; i < i_end; i+= expand_out, in_pix2 += inDX, out_pix+= expand_out) { 87 103 pixvalue = pixel[*in_pix2]; 88 104 out_pix2 = out_pix; 89 for (jj = 0; (jj < expand_out) & (j + jj < dy); jj++, out_pix2+=(dx-expand_out)) {105 for (jj = 0; (jj < expand_out) && (j + jj < dy); jj++, out_pix2+=(dx-expand_out)) { 90 106 for (ii = 0; ii < expand_out; ii++, out_pix2++) { 91 107 *out_pix2 = pixvalue; … … 103 119 } 104 120 } 105 out_pix += (dx - i_end);106 107 121 } 108 122 109 if ((j_end - j_start) % expand_out > 0)110 out_pix -= expand_out - (j_end - j_start) % expand_out;111 112 123 /**** fill in top area ****/ 113 for (j = 0; (j < dx*(dy - j_end)) && (out_pix - (unsigned char *)picture[0].data < dx*dy); j++, out_pix++) { 114 *out_pix = back; 124 out_pix = &data[j_end*dx]; 125 for (j = 0; j < dy - j_end; j++) { 126 for (i = 0; i < dx; i++, out_pix++) { 127 *out_pix = back; 128 } 115 129 } 116 130 picture[0].pix = XCreateImage (graphic[0].display, graphic[0].visual, graphic[0].depth, ZPixmap, 0,
Note:
See TracChangeset
for help on using the changeset viewer.
