|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?h64020
|
|
Toshihiro Shimizu |
890ddd |
?s 00077 / 00001 / 08351
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.105 00 / 11 / 24 20 : 06 : 53 vincenzo 105 104
|
|
Toshihiro Shimizu |
890ddd |
?c rop_mirror per cmapped
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00015 / 00003 / 08337
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.104 00 / 02 / 18 15 : 59 : 01 max 104 103
|
|
Toshihiro Shimizu |
890ddd |
?c fix baco in rop_premultiply RGBM64 RGBM64;
|
|
Toshihiro Shimizu |
890ddd |
rop_copy funz.su RAS_BW, RAS_BW
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00000 / 08339
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.103 00 / 01 / 12 12 : 08 : 57 vincenzo 103 102
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy CM24->GR16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00005 / 00000 / 08334
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.102 99 / 11 / 25 11 : 02 : 20 max 102 101
|
|
Toshihiro Shimizu |
890ddd |
?c rop mirror gestisce WB e BW
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00000 / 08332
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.101 99 / 11 / 12 16 : 22 : 09 vincenzo 101 100
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_cm16s12->rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00001 / 08330
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.100 99 / 10 / 28 10 : 10 : 09 max 100 99
|
|
Toshihiro Shimizu |
890ddd |
?c rop_mirror supporta anche rastype RAS_WB
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00016 / 00000 / 08315
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.99 99 / 08 / 20 09 : 53 : 22 vincenzo 99 98
|
|
Toshihiro Shimizu |
890ddd |
?c messaggi(disattivati) di diagnostica sulla memoria
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00090 / 00000 / 08225
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.98 99 / 05 / 17 17 : 28 : 42 vincenzo 98 97
|
|
Toshihiro Shimizu |
890ddd |
?c CM16S12
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00006 / 00021 / 08219
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.97 99 / 04 / 01 17 : 59 : 05 vincenzo 97 96
|
|
Toshihiro Shimizu |
890ddd |
?c conversioni varie utilizzate per salvare i.mov
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00374 / 00191 / 07866
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.96 99 / 03 / 26 19 : 19 : 15 vincenzo 96 95
|
|
Toshihiro Shimizu |
890ddd |
?c rop_xrgb1555
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00484 / 00000 / 07573
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.95 99 / 03 / 03 16 : 08 : 21 max 95 94
|
|
Toshihiro Shimizu |
890ddd |
?c + rop_copy rgbx64->rgbx, rgbx64->rgb16;
|
|
Toshihiro Shimizu |
890ddd |
+ rop_zoom_out rgbx64->rgbx, rgbx64->rgb16, rgbm64->rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00013 / 00009 / 07560
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.94 99 / 02 / 25 17:04:34 tross 94 93
|
|
Toshihiro Shimizu |
890ddd |
?c rop_subimage_to_raster anche per RGBM64
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00007 / 00006 / 07562
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.93 99 / 02 / 20 15:51:08 tross 93 92
|
|
Toshihiro Shimizu |
890ddd |
?c corretta rop_clear(sbagliava se y1 != 0)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 07567
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.92 99 / 02 / 17 19:07:11 vincenzo 92 91
|
|
Toshihiro Shimizu |
890ddd |
?c la clone_raster fa anche gli extra
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00020 / 00016 / 07548
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.91 99 / 02 / 15 17:31:49 tross 91 90
|
|
Toshihiro Shimizu |
890ddd |
?c corretta la clone_raster per CM
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00029 / 00002 / 07535
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.90 99 / 02 / 15 17:22:14 vincenzo 90 89
|
|
Toshihiro Shimizu |
890ddd |
?c RAS_GR16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00713 / 00426 / 06824
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.89 99 / 01 / 11 18:03:57 tross 89 88
|
|
Shinya Kitaoka |
120a6e |
?c migliorati extra:corretti bachi e aggiunte funz -
|
|
Shinya Kitaoka |
120a6e |
corretta
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_penramp(baco tcheck cm24)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00034 / 00002 / 07216
|
|
Shinya Kitaoka |
120a6e |
?d D 1.88 98 / 12 / 14
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
21:17 vincenzo 88 87
|
|
Toshihiro Shimizu |
890ddd |
?c ristrutturazione megagalattica per le dll
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00013 / 00000 / 07205
|
|
Shinya Kitaoka |
120a6e |
?d D 1.87 98 / 10 / 23
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
21:44 vincenzo 87 86
|
|
Toshihiro Shimizu |
890ddd |
?c convert_raster
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00007 / 00001 / 07198
|
|
Shinya Kitaoka |
120a6e |
?d D 1.86 98 / 09 / 24
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
32:38 tross 86 85
|
|
Toshihiro Shimizu |
890ddd |
?c messa cmap.info in create_raster()
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00003 / 00000 / 07196
|
|
Shinya Kitaoka |
120a6e |
?d D 1.85 98 / 09 / 14
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
15:32 vincenzo 85 84
|
|
Toshihiro Shimizu |
890ddd |
?c clone_raster mette anchge la cmap
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 01500 / 00701 / 05696
|
|
Shinya Kitaoka |
120a6e |
?d D 1.84 98 / 09 / 14
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
57:39 tross 84 83
|
|
Toshihiro Shimizu |
890ddd |
?c modifiche per CM24, velocizzati[un] premult_lpixel
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00044 / 00064 / 06353
|
|
Shinya Kitaoka |
120a6e |
?d D 1.83 98 / 08 / 14
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
14:44 tross 83 82
|
|
Toshihiro Shimizu |
890ddd |
?c tolti UNICM
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00013 / 00014 / 06404
|
|
Shinya Kitaoka |
120a6e |
?d D 1.82 98 / 08 / 14
|
|
Shinya Kitaoka |
120a6e |
14:
|
|
Shinya Kitaoka |
120a6e |
39:55 tross 82 81
|
|
Toshihiro Shimizu |
890ddd |
?c tolto cmap.size
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00348 / 00177 / 06070
|
|
Shinya Kitaoka |
120a6e |
?d D 1.81 98 / 07 / 16
|
|
Shinya Kitaoka |
120a6e |
20:
|
|
Shinya Kitaoka |
120a6e |
02:00 tross 81 80
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy e rop_zoom_out rgb_rgb16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00028 / 00000 / 06219
|
|
Shinya Kitaoka |
120a6e |
?d D 1.80 98 / 07 / 10
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
32:08 vincenzo 80 79
|
|
Toshihiro Shimizu |
890ddd |
?c create_subraster e clone_raster
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00005 / 00014 / 06214
|
|
Shinya Kitaoka |
120a6e |
?d D 1.79 98 / 06 / 09
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
29:54 vincenzo 79 78
|
|
Toshihiro Shimizu |
890ddd |
?c eliminata struct cmap_color
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00025 / 00025 / 06203
|
|
Shinya Kitaoka |
120a6e |
?d D 1.78 98 / 03 / 26
|
|
Shinya Kitaoka |
120a6e |
01:
|
|
Shinya Kitaoka |
120a6e |
07:03 tross 78 77
|
|
Toshihiro Shimizu |
890ddd |
?c assert(FALSE)-- > abort()per problemi di GP piena
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00038 / 00000 / 06190
|
|
Shinya Kitaoka |
120a6e |
?d D 1.77 98 / 03 / 13
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
35:34 vincenzo 77 76
|
|
Toshihiro Shimizu |
890ddd |
?c create_raster e release_raster
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00002 / 06188
|
|
Shinya Kitaoka |
120a6e |
?d D 1.76 98 / 03 / 09
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
00:15 vincenzo 76 75
|
|
Toshihiro Shimizu |
890ddd |
?c rop_image_to_(sub)raster non inizializzava native_buffer
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00004 / 00004 / 06186
|
|
Shinya Kitaoka |
120a6e |
?d D 1.75 98 / 02 / 23
|
|
Shinya Kitaoka |
120a6e |
12:
|
|
Shinya Kitaoka |
120a6e |
35:57 vincenzo 75 74
|
|
Toshihiro Shimizu |
890ddd |
?c sbagliata scansione raster su premultiply
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00082 / 00002 / 06108
|
|
Shinya Kitaoka |
120a6e |
?d D 1.74 98 / 02 / 23
|
|
Shinya Kitaoka |
120a6e |
11:
|
|
Shinya Kitaoka |
120a6e |
15:21 tross 74 73
|
|
Toshihiro Shimizu |
890ddd |
?c rop_premultiply()
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00056 / 00051 / 06054
|
|
Shinya Kitaoka |
120a6e |
?d D 1.73 97 / 12 / 01
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
26:04 vincenzo 73 72
|
|
Toshihiro Shimizu |
890ddd |
?c rgbx->bw_q, cm16->bw_q
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00020 / 00000 / 06085
|
|
Shinya Kitaoka |
120a6e |
?d D 1.72 97 / 11 / 28
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
31:32 vincenzo 72 71
|
|
Toshihiro Shimizu |
890ddd |
?c gestione RAS_CMxSy(copy, pixbytes pix_to_ras etc)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00017 / 00001 / 06068
|
|
Shinya Kitaoka |
120a6e |
?d D 1.71 97 / 11 / 18
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
42:31 tross 71 70
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy RAS_CMxSy
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00033 / 00001 / 06036
|
|
Shinya Kitaoka |
120a6e |
?d D 1.70 97 / 09 / 26
|
|
Shinya Kitaoka |
120a6e |
12:
|
|
Shinya Kitaoka |
120a6e |
25:32 vincenzo 70 69
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_rgb16_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00010 / 00007 / 06027
|
|
Shinya Kitaoka |
120a6e |
?d D 1.69 97 / 09 / 23
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
53:42 tross 69 68
|
|
Toshihiro Shimizu |
890ddd |
?c migliorata la rop_copy_bw
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00043 / 00003 / 05991
|
|
Shinya Kitaoka |
120a6e |
?d D 1.68 97 / 09 / 23
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
00:23 tross 68 67
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_bw_bw
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00038 / 00000 / 05956
|
|
Shinya Kitaoka |
120a6e |
?d D 1.67 97 / 09 / 22
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
20:35 tross 67 66
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_rgbx_rgb(vincenzo)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00006 / 00016 / 05950
|
|
Shinya Kitaoka |
120a6e |
?d D 1.66 97 / 04 / 01
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
46:33 vincenzo 66 65
|
|
Toshihiro Shimizu |
890ddd |
?c esportata la dither
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00037 / 00021 / 05929
|
|
Shinya Kitaoka |
120a6e |
?d D 1.65 97 / 03 / 27
|
|
Shinya Kitaoka |
120a6e |
19:
|
|
Shinya Kitaoka |
120a6e |
54:27 tross 65 64
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_rgbm64_rgbm con random round
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 05949
|
|
Shinya Kitaoka |
120a6e |
?d D 1.64 97 / 01 / 03
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
10:39 roberto 64 63
|
|
Toshihiro Shimizu |
890ddd |
?c Corretto bug in rop_copy_90(CASE-- __OR)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00453 / 00002 / 05497
|
|
Shinya Kitaoka |
120a6e |
?d D 1.63 96 / 11 / 24
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
36:00 tross 63 62
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90_rgb_rgb16, rop_zoom_out_90_rgb_rgb16 / rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00381 / 00003 / 05118
|
|
Shinya Kitaoka |
120a6e |
?d D 1.62 96 / 09 / 14
|
|
Shinya Kitaoka |
120a6e |
21:
|
|
Shinya Kitaoka |
120a6e |
54:23 tross 62 61
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_bw_rgb16 / rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00577 / 00323 / 04544
|
|
Shinya Kitaoka |
120a6e |
?d D 1.61 96 / 09 / 12
|
|
Shinya Kitaoka |
120a6e |
19:
|
|
Shinya Kitaoka |
120a6e |
44:13 tross 61 60
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_bw_rgbm / rgb16, corretto rop_zoom_out_90_gr8_...
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00026 / 00026 / 04841
|
|
Shinya Kitaoka |
120a6e |
?d D 1.60 96 / 08 / 05
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
15:12 vincenzo 60 59
|
|
Toshihiro Shimizu |
890ddd |
?c gl_color->LPIXEL
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00001 / 04865
|
|
Shinya Kitaoka |
120a6e |
?d D 1.59 96 / 07 / 12
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
41:01 vincenzo 59 58
|
|
Toshihiro Shimizu |
890ddd |
?c messo RGBM64 rop_pixbytes
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00246 / 00123 / 04620
|
|
Shinya Kitaoka |
120a6e |
?d D 1.58 96 / 07 / 10
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
57:56 vincenzo 58 57
|
|
Toshihiro Shimizu |
890ddd |
?c introdotto rop_copy per RAS_RGBM64
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00280 / 00086 / 04463
|
|
Shinya Kitaoka |
120a6e |
?d D 1.57 96 / 07 / 10
|
|
Shinya Kitaoka |
120a6e |
01:
|
|
Shinya Kitaoka |
120a6e |
01:58 tross 57 56
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_90, per ora solo gr8-- > rgb16 / rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00279 / 00110 / 04270
|
|
Shinya Kitaoka |
120a6e |
?d D 1.56 96 / 07 / 09
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
44:14 tross 56 55
|
|
Toshihiro Shimizu |
890ddd |
?c cmap.offset-- > cmap.info.offset_mask etc.
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00238 / 00065 / 04142
|
|
Shinya Kitaoka |
120a6e |
?d D 1.55 96 / 07 / 01
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
24:22 tross 55 54
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90_bw / gr8_rgb16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00205 / 00009 / 04002
|
|
Shinya Kitaoka |
120a6e |
?d D 1.54 96 / 06 / 27
|
|
Shinya Kitaoka |
120a6e |
20:
|
|
Shinya Kitaoka |
120a6e |
46:24 tross 54 53
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_bw / gr8_rgb16, rop_zoom_out_gr8_rgb16, aggiornati nomi macro RGB16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00094 / 00047 / 03917
|
|
Shinya Kitaoka |
120a6e |
?d D 1.53 96 / 06 / 27
|
|
Shinya Kitaoka |
120a6e |
04:
|
|
Shinya Kitaoka |
120a6e |
39:24 tross 53 52
|
|
Toshihiro Shimizu |
890ddd |
?c conversioni pix_type<->ras_type
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00675 / 00343 / 03289
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.52 96 / 06 / 26 02:04:18 tross 52 51
|
|
Toshihiro Shimizu |
890ddd |
?c potrebbero funziare un po' di copy e zoom_out ->rgb16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00001 / 03630
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.51 96 / 05 / 15 22:11:20 tross 51 50
|
|
Toshihiro Shimizu |
890ddd |
?c tmsg.h
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00011 / 00000 / 03620
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.50 96 / 05 / 11 13:34:15 tross 50 49
|
|
Toshihiro Shimizu |
890ddd |
?c variabili non inizializzate
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 03619
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.49 96 / 04 / 10 02:05:56 tross 49 48
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_rgb_rgbm(con baco corretto)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00112 / 00001 / 03508
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.48 96 / 04 / 10 02:01:59 tross 48 47
|
|
Toshihiro Shimizu |
890ddd |
?c
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00104 / 00010 / 03405
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.47 96 / 03 / 19 18:04:11 tross 47 46
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_gr8_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00139 / 00010 / 03276
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.46 96 / 03 / 18 20:22:38 tross 46 45
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_rgbx
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00003 / 00002 / 03283
|
|
Toshihiro Shimizu |
890ddd |
?d D 1.45 96 / 02 / 08 23:16:51 tross 45 44
|
|
Toshihiro Shimizu |
890ddd |
?c mancava la rop_copy_90 RGB--> RGB_
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00000 / 00002 / 03285
|
|
Shinya Kitaoka |
120a6e |
?d D 1.44 96 / 02 / 07
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
24:05 tross 44 43
|
|
Toshihiro Shimizu |
890ddd |
?c tolta una printf
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00091 / 00000 / 03196
|
|
Shinya Kitaoka |
120a6e |
?d D 1.43 95 / 11 / 21
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
33:23 roberto 43 42
|
|
Toshihiro Shimizu |
890ddd |
?c Introdotta rgb to rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00004 / 00001 / 03192
|
|
Shinya Kitaoka |
120a6e |
?d D 1.42 95 / 10 / 09
|
|
Shinya Kitaoka |
120a6e |
14:
|
|
Shinya Kitaoka |
120a6e |
57:40 vinz 42 41
|
|
Toshihiro Shimizu |
890ddd |
?c aggiunti i rop_copy RAS_CM16-- > quantized type
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00061 / 00042 / 03132
|
|
Shinya Kitaoka |
120a6e |
?d D 1.41 95 / 10 / 04
|
|
Shinya Kitaoka |
120a6e |
18:
|
|
Shinya Kitaoka |
120a6e |
16:37 tross 41 40
|
|
Shinya Kitaoka |
120a6e |
?c corretto baco di
|
|
Shinya Kitaoka |
120a6e |
rop_copy:fatto rop_copy_same()
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00061 / 00001 / 03113
|
|
Shinya Kitaoka |
120a6e |
?d D 1.40 95 / 10 / 04
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
05:47 tross 40 39
|
|
Toshihiro Shimizu |
890ddd |
?c rop_[sub] image_to_raster()
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00095 / 00017 / 03019
|
|
Shinya Kitaoka |
120a6e |
?d D 1.39 95 / 10 / 04
|
|
Shinya Kitaoka |
120a6e |
12:
|
|
Shinya Kitaoka |
120a6e |
27:49 vinz 39 38
|
|
Toshihiro Shimizu |
890ddd |
?c aggiunto il rop_shrink
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00007 / 00007 / 03029
|
|
Shinya Kitaoka |
120a6e |
?d D 1.38 95 / 09 / 25
|
|
Shinya Kitaoka |
120a6e |
02:
|
|
Shinya Kitaoka |
120a6e |
26:09 tross 38 37
|
|
Toshihiro Shimizu |
890ddd |
?c corretto baco(poco visibile)nei rop_zoom_out... _rgbm()
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00004 / 03035
|
|
Shinya Kitaoka |
120a6e |
?d D 1.37 95 / 09 / 20
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
57:00 tross 37 36
|
|
Toshihiro Shimizu |
890ddd |
?c migliorate rop_custom_fill_cmap_ramp / buffer
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00060 / 00000 / 02979
|
|
Shinya Kitaoka |
120a6e |
?d D 1.36 95 / 09 / 19
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
22:55 tross 36 35
|
|
Toshihiro Shimizu |
890ddd |
?c rop_custom_fill_cmap_ramp / buffer
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00006 / 02977
|
|
Shinya Kitaoka |
120a6e |
?d D 1.35 95 / 07 / 28
|
|
Shinya Kitaoka |
120a6e |
21:
|
|
Shinya Kitaoka |
120a6e |
35:43 tross 35 34
|
|
Toshihiro Shimizu |
890ddd |
?c estetica
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00004 / 00000 / 02979
|
|
Shinya Kitaoka |
120a6e |
?d D 1.34 95 / 07 / 28
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
17:40 grisu 34 33
|
|
Toshihiro Shimizu |
890ddd |
?c corretto un baco sull' offset della cmap
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 02978
|
|
Shinya Kitaoka |
120a6e |
?d D 1.33 95 / 07 / 28
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
22:33 tross 33 32
|
|
Toshihiro Shimizu |
890ddd |
?c corretto baco di un controllo in rop_fill_cmap_buffer
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00119 / 00005 / 02860
|
|
Shinya Kitaoka |
120a6e |
?d D 1.32 95 / 07 / 27
|
|
Shinya Kitaoka |
120a6e |
21:
|
|
Shinya Kitaoka |
120a6e |
36:31 tross 32 31
|
|
Toshihiro Shimizu |
890ddd |
?c rop_fill_cmap_ramp / buffer
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00275 / 00022 / 02590
|
|
Shinya Kitaoka |
120a6e |
?d D 1.31 95 / 07 / 27
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
05:00 tross 31 30
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out_cm16_rgbm, rop_zoom_out_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00003 / 00001 / 02609
|
|
Shinya Kitaoka |
120a6e |
?d D 1.30 95 / 07 / 09
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
23:39 tross 30 29
|
|
Toshihiro Shimizu |
890ddd |
?c messaggio in rop_zoom_out access violation
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00043 / 00034 / 02567
|
|
Shinya Kitaoka |
120a6e |
?d D 1.29 95 / 07 / 04
|
|
Shinya Kitaoka |
120a6e |
01:
|
|
Shinya Kitaoka |
120a6e |
50:38 tross 29 28
|
|
Toshihiro Shimizu |
890ddd |
?c rop_zoom_out a scacchiera, cmap_offset presottratto a varie funz
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00531 / 00005 / 02070
|
|
Shinya Kitaoka |
120a6e |
?d D 1.28 95 / 07 / 04
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
46:11 tross 28 27
|
|
Toshihiro Shimizu |
890ddd |
?c con rop_zoom_out funzionante per cm16_rgb_
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00003 / 00001 / 02072
|
|
Shinya Kitaoka |
120a6e |
?d D 1.27 95 / 07 / 03
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
38:32 tross 27 26
|
|
Toshihiro Shimizu |
890ddd |
?c messaggio completo in caso di access violation
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00086 / 00000 / 01987
|
|
Shinya Kitaoka |
120a6e |
?d D 1.26 94 / 12 / 28
|
|
Shinya Kitaoka |
120a6e |
21:
|
|
Shinya Kitaoka |
120a6e |
07:43 tross 26 25
|
|
Toshihiro Shimizu |
890ddd |
?c aggiunta rop_copy_90_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00043 / 00000 / 01944
|
|
Shinya Kitaoka |
120a6e |
?d D 1.25 94 / 11 / 30
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
03:25 tross 25 24
|
|
Toshihiro Shimizu |
890ddd |
?c aggiunto rop_add / remove_white_to / from_cmap
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 01943
|
|
Shinya Kitaoka |
120a6e |
?d D 1.24 94 / 10 / 26
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
28:46 tross 24 23
|
|
Toshihiro Shimizu |
890ddd |
?c corretto baco rop_copy_rgb_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00147 / 00014 / 01797
|
|
Shinya Kitaoka |
120a6e |
?d D 1.23 94 / 09 / 16
|
|
Shinya Kitaoka |
120a6e |
19:
|
|
Shinya Kitaoka |
120a6e |
45:57 tross 23 22
|
|
Toshihiro Shimizu |
890ddd |
?c cm8
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00231 / 00000 / 01580
|
|
Shinya Kitaoka |
120a6e |
?d D 1.22 94 / 09 / 16
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
02:27 tross 22 21
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90_bw / gr8_rgbm
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00243 / 00027 / 01337
|
|
Shinya Kitaoka |
120a6e |
?d D 1.21 94 / 09 / 11
|
|
Shinya Kitaoka |
120a6e |
20:
|
|
Shinya Kitaoka |
120a6e |
52:53 tross 21 20
|
|
Toshihiro Shimizu |
890ddd |
?c con rop_copy_90-- > cm16
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00243 / 00000 / 01121
|
|
Shinya Kitaoka |
120a6e |
?d D 1.20 94 / 09 / 05
|
|
Shinya Kitaoka |
120a6e |
23:
|
|
Shinya Kitaoka |
120a6e |
18:47 tross 20 19
|
|
Toshihiro Shimizu |
890ddd |
?c iniziato rop_reduce
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00059 / 00000 / 01062
|
|
Shinya Kitaoka |
120a6e |
?d D 1.19 94 / 06 / 07
|
|
Shinya Kitaoka |
120a6e |
07:
|
|
Shinya Kitaoka |
120a6e |
01:19 tross 19 18
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy WB->RGBM
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00096 / 00004 / 00966
|
|
Shinya Kitaoka |
120a6e |
?d D 1.18 94 / 06 / 01
|
|
Shinya Kitaoka |
120a6e |
00:
|
|
Shinya Kitaoka |
120a6e |
42:00 tross 18 17
|
|
Toshihiro Shimizu |
890ddd |
?c con cura dimagrante per entrare nella cassetta
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00124 / 00001 / 00846
|
|
Shinya Kitaoka |
120a6e |
?d D 1.17 94 / 04 / 29
|
|
Shinya Kitaoka |
120a6e |
23:
|
|
Shinya Kitaoka |
120a6e |
15:12 tross 17 16
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90_bw_gr8
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00009 / 00009 / 00838
|
|
Shinya Kitaoka |
120a6e |
?d D 1.16 94 / 04 / 14
|
|
Shinya Kitaoka |
120a6e |
23:
|
|
Shinya Kitaoka |
120a6e |
21:49 tross 16 15
|
|
Toshihiro Shimizu |
890ddd |
?c wrap((+7) / 8)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00155 / 00001 / 00692
|
|
Shinya Kitaoka |
120a6e |
?d D 1.15 94 / 04 / 06
|
|
Shinya Kitaoka |
120a6e |
16:
|
|
Shinya Kitaoka |
120a6e |
19:14 tross 15 14
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90_bw piu' veloce
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00273 / 00068 / 00420
|
|
Shinya Kitaoka |
120a6e |
?d D 1.14 94 / 04 / 06
|
|
Shinya Kitaoka |
120a6e |
03:
|
|
Shinya Kitaoka |
120a6e |
25:39 tross 14 13
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy_90 pare funzionare per bw e gr8
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00003 / 00003 / 00485
|
|
Shinya Kitaoka |
120a6e |
?d D 1.13 94 / 03 / 31
|
|
Shinya Kitaoka |
120a6e |
19:
|
|
Shinya Kitaoka |
120a6e |
38:31 tross 13 12
|
|
Toshihiro Shimizu |
890ddd |
?c
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00012 / 00008 / 00476
|
|
Shinya Kitaoka |
120a6e |
?d D 1.12 94 / 03 / 30
|
|
Shinya Kitaoka |
120a6e |
21:
|
|
Shinya Kitaoka |
120a6e |
06:15 tross 12 11
|
|
Toshihiro Shimizu |
890ddd |
?c
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00001 / 00001 / 00483
|
|
Shinya Kitaoka |
120a6e |
?d D 1.11 94 / 03 / 30
|
|
Shinya Kitaoka |
120a6e |
20:
|
|
Shinya Kitaoka |
120a6e |
46:54 tross 11 10
|
|
Toshihiro Shimizu |
890ddd |
?c
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00030 / 00048 / 00454
|
|
Shinya Kitaoka |
120a6e |
?d D 1.10 94 / 03 / 30
|
|
Shinya Kitaoka |
120a6e |
20:
|
|
Shinya Kitaoka |
120a6e |
45:37 tross 10 9
|
|
Toshihiro Shimizu |
890ddd |
?c rimesso a posto il wrap(in pixel)
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00007 / 00000 / 00495
|
|
Shinya Kitaoka |
120a6e |
?d D 1.9 94 / 03 / 30
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
30:50 tross 9 8
|
|
Toshihiro Shimizu |
890ddd |
?c rop_pixbytes
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00021 / 00006 / 00474
|
|
Shinya Kitaoka |
120a6e |
?d D 1.8 94 / 03 / 13
|
|
Shinya Kitaoka |
120a6e |
17:
|
|
Shinya Kitaoka |
120a6e |
41:53 tross 8 7
|
|
Toshihiro Shimizu |
890ddd |
?c corretto baco su rop_copy tra dimensioni diverse
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00005 / 00001 / 00475
|
|
Shinya Kitaoka |
120a6e |
?d D 1.7 94 / 03 / 11
|
|
Shinya Kitaoka |
120a6e |
14:
|
|
Shinya Kitaoka |
120a6e |
04:27 tross 7 6
|
|
Toshihiro Shimizu |
890ddd |
?c bachetto rop_copy, per 3.01j
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00187 / 00001 / 00289
|
|
Shinya Kitaoka |
120a6e |
?d D 1.6 94 / 03 / 11
|
|
Shinya Kitaoka |
120a6e |
13:
|
|
Shinya Kitaoka |
120a6e |
48:45 tross 6 5
|
|
Toshihiro Shimizu |
890ddd |
?c per 3.01j
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00024 / 00027 / 00266
|
|
Shinya Kitaoka |
120a6e |
?d D 1.5 94 / 03 / 02
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
14:56 tross 5 4
|
|
Toshihiro Shimizu |
890ddd |
?c cmap per copy bw->cm16 sempre lunga 256
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00125 / 00008 / 00168
|
|
Shinya Kitaoka |
120a6e |
?d D 1.4 94 / 02 / 28
|
|
Shinya Kitaoka |
120a6e |
15:
|
|
Shinya Kitaoka |
120a6e |
53:37 tross 4 3
|
|
Toshihiro Shimizu |
890ddd |
?c rop_copy per RAS_BW e RAS_WB
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00002 / 00000 / 00174
|
|
Shinya Kitaoka |
120a6e |
?d D 1.3 94 / 02 / 19
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
17:18 tross 3 2
|
|
Toshihiro Shimizu |
890ddd |
?c per fullwarn su os_4
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00024 / 00019 / 00150
|
|
Shinya Kitaoka |
120a6e |
?d D 1.2 94 / 02 / 10
|
|
Shinya Kitaoka |
120a6e |
14:
|
|
Shinya Kitaoka |
120a6e |
04:52 tross 2 1
|
|
Toshihiro Shimizu |
890ddd |
?c cambiati i RAS_
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?s 00169 / 00000 / 00000
|
|
Shinya Kitaoka |
120a6e |
?d D 1.1 94 / 02 / 04
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
02:58 tross 1 0
|
|
Shinya Kitaoka |
120a6e |
?c date and time created 94 / 02 / 04
|
|
Shinya Kitaoka |
120a6e |
22:
|
|
Shinya Kitaoka |
120a6e |
02:58 by tross
|
|
Toshihiro Shimizu |
890ddd |
?e
|
|
Toshihiro Shimizu |
890ddd |
?u
|
|
Toshihiro Shimizu |
890ddd |
?U
|
|
Toshihiro Shimizu |
890ddd |
?f e 0
|
|
Toshihiro Shimizu |
890ddd |
?t
|
|
Toshihiro Shimizu |
890ddd |
?T
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
?D 32
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Toshihiro Shimizu |
890ddd |
#include "stopwatch.h"
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 32
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 1
|
|
Toshihiro Shimizu |
890ddd |
#include <stdio.h>
|
|
Toshihiro Shimizu |
890ddd |
#include <string.h>
|
|
Toshihiro Shimizu |
890ddd |
?I 40
|
|
Toshihiro Shimizu |
890ddd |
#include <stdlib.h>
|
|
Toshihiro Shimizu |
890ddd |
?E 40
|
|
Toshihiro Shimizu |
890ddd |
?I 32
|
|
Toshihiro Shimizu |
890ddd |
#include <assert.h>
|
|
Toshihiro Shimizu |
890ddd |
?E 32
|
|
Toshihiro Shimizu |
890ddd |
#include "toonz.h"
|
|
Toshihiro Shimizu |
890ddd |
?I 51
|
|
Toshihiro Shimizu |
890ddd |
#include "tmsg.h"
|
|
Toshihiro Shimizu |
890ddd |
?E 51
|
|
Toshihiro Shimizu |
890ddd |
?D 39
|
|
Toshihiro Shimizu |
890ddd |
#include "raster.h"
|
|
Toshihiro Shimizu |
890ddd |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
?I 39
|
|
Toshihiro Shimizu |
890ddd |
?D 40
|
|
Toshihiro Shimizu |
890ddd |
#include "rasterwork.h"
|
|
Toshihiro Shimizu |
890ddd |
?E 40
|
|
Toshihiro Shimizu |
890ddd |
?I 40
|
|
Toshihiro Shimizu |
890ddd |
#include "raster.h"
|
|
Toshihiro Shimizu |
890ddd |
?E 40
|
|
Toshihiro Shimizu |
890ddd |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
#include "raster_p.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 99
|
|
Toshihiro Shimizu |
890ddd |
#define MEMORY_PRINTF
|
|
Toshihiro Shimizu |
890ddd |
?E 99
|
|
Toshihiro Shimizu |
890ddd |
?I 32
|
|
Toshihiro Shimizu |
890ddd |
#define STW_DISABLE
|
|
Toshihiro Shimizu |
890ddd |
#include "stopwatch.h"
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 61
|
|
Shinya Kitaoka |
120a6e |
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) & \
|
|
Shinya Kitaoka |
120a6e |
(UCHAR)1)
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &= \
|
|
Shinya Kitaoka |
120a6e |
~(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |= \
|
|
Shinya Kitaoka |
120a6e |
(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define BITCPY(XO, YO, BUFO, BYTEWRAPO, BITOFFSO, XI, YI, BUFI, BYTEWRAPI, \
|
|
Shinya Kitaoka |
120a6e |
BITOFFSI) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(XI, YI, BUFI, BYTEWRAPI, BITOFFSI)) \
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_1(XO, YO, BUFO, BYTEWRAPO, BITOFFSO); \
|
|
Shinya Kitaoka |
120a6e |
else \
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_0(XO, YO, BUFO, BYTEWRAPO, BITOFFSO); \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 62
|
|
Shinya Kitaoka |
120a6e |
#define GET_BWBIT(BIT, BUF) (((BUF)[(BIT) >> 3] >> (7 - ((BIT)&7))) & 1)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
#define MAGICFAC (257U * 256U + 1U)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#define MAP24 PIX_CM24_PENMAP_COLMAP_TO_RGBM
|
|
Toshihiro Shimizu |
890ddd |
#define MAP24_64 PIX_CM24_PENMAP_COLMAP_TO_RGBM64
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 95
|
|
Shinya Kitaoka |
120a6e |
#define PIX_RGB16_FROM_USHORT(R, G, B) \
|
|
Shinya Kitaoka |
120a6e |
(((((R)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 16) & 0xf800 | \
|
|
Shinya Kitaoka |
120a6e |
((((G)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 21) & 0x07e0 | \
|
|
Shinya Kitaoka |
120a6e |
((((B)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 27))
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 96
|
|
Toshihiro Shimizu |
890ddd |
#define PIX_RGB16_FROM_RGBX64(L) (PIX_RGB16_FROM_USHORT((L).r, (L).g, (L).b))
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?I 96
|
|
Shinya Kitaoka |
120a6e |
#define PIX_XRGB1555_FROM_USHORT(R, G, B) \
|
|
Shinya Kitaoka |
120a6e |
(((((R)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 17) & 0x7c00 | \
|
|
Shinya Kitaoka |
120a6e |
((((G)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 22) & 0x03e0 | \
|
|
Shinya Kitaoka |
120a6e |
((((B)*BYTE_FROM_USHORT_MAGICFAC) + (1 << 23)) >> 27))
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 96
|
|
Toshihiro Shimizu |
890ddd |
#define PIX_RGB16_FROM_RGBX64(L) (PIX_RGB16_FROM_USHORT((L).r, (L).g, (L).b))
|
|
Shinya Kitaoka |
120a6e |
#define PIX_XRGB1555_FROM_RGBX64(L) \
|
|
Shinya Kitaoka |
120a6e |
(PIX_XRGB1555_FROM_USHORT((L).r, (L).g, (L).b))
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?E 95
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 66
|
|
Toshihiro Shimizu |
890ddd |
?D 74
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 74
|
|
Toshihiro Shimizu |
890ddd |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?E 62
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?D 52
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?E 32
|
|
Toshihiro Shimizu |
890ddd |
?I 6
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Shinya Kitaoka |
120a6e |
/* TOGLIERE QUESTA ROBA (chiedere a Walter) */
|
|
Shinya Kitaoka |
120a6e |
?E 14 static void rop_copy_90_bw(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
?D 14 int ninety, int flip);
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?E 14 static void rop_copy_90_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
?D 14 int ninety, int flip);
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 21 static void rop_copy_90_gr8_cm16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 22 static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 55 static void rop_copy_90_gr8_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 23 static void rop_copy_90_cm8_cm16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_cm8_cm24(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?E 22
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Shinya Kitaoka |
120a6e |
?I 17 static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 21 static void rop_copy_90_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 55 static void rop_copy_90_bw_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 22 static void rop_copy_90_bw_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 26 static void rop_copy_90_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety);
|
|
Shinya Kitaoka |
120a6e |
?I 63 static void rop_copy_90_rgb_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 63
|
|
Shinya Kitaoka |
120a6e |
?I 43 static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety);
|
|
Toshihiro Shimizu |
890ddd |
?E 43
|
|
Toshihiro Shimizu |
890ddd |
?I 40
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 104 static void rop_copy_bw(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 104
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 88
|
|
Toshihiro Shimizu |
890ddd |
?D 89 static LPIXEL
|
|
Shinya Kitaoka |
120a6e |
rop_premult(LPIXEL color) {
|
|
Shinya Kitaoka |
120a6e |
UINT m, mm;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL new_color;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = color.m;
|
|
Shinya Kitaoka |
120a6e |
if (m == 255)
|
|
Shinya Kitaoka |
120a6e |
new_color = color;
|
|
Shinya Kitaoka |
120a6e |
else if (m == 0) {
|
|
Shinya Kitaoka |
120a6e |
new_color.r = 0;
|
|
Shinya Kitaoka |
120a6e |
new_color.g = 0;
|
|
Shinya Kitaoka |
120a6e |
new_color.b = 0;
|
|
Shinya Kitaoka |
120a6e |
new_color.m = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
mm = m * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
new_color.r = (color.r * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
new_color.g = (color.g * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
new_color.b = (color.b * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
new_color.m = m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return new_color;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?E 88
|
|
Toshihiro Shimizu |
890ddd |
?D 79 void rop_image_to_raster(IMAGE *img, RASTER *ras, int build_cmap)
|
|
Toshihiro Shimizu |
890ddd |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
?I 79 void rop_image_to_raster(IMAGE *img, RASTER *ras, int get_cmap)
|
|
Shinya Kitaoka |
120a6e |
?E 79 {
|
|
Shinya Kitaoka |
120a6e |
rop_subimage_to_raster(img, 0, 0, img->pixmap.xsize - 1,
|
|
Shinya Kitaoka |
120a6e |
img->pixmap.ysize - 1,
|
|
Toshihiro Shimizu |
890ddd |
?D 79 ras, build_cmap);
|
|
Toshihiro Shimizu |
890ddd |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
?I 79
|
|
Toshihiro Shimizu |
890ddd |
ras, get_cmap);
|
|
Toshihiro Shimizu |
890ddd |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void rop_subimage_to_raster (IMAGE *img,
|
|
Toshihiro Shimizu |
890ddd |
int img_x0, int img_y0, int img_x1, int img_y1,
|
|
Toshihiro Shimizu |
890ddd |
?D 79
|
|
Toshihiro Shimizu |
890ddd |
RASTER *ras, int build_cmap)
|
|
Toshihiro Shimizu |
890ddd |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
?I 79
|
|
Toshihiro Shimizu |
890ddd |
RASTER *ras, int get_cmap)
|
|
Toshihiro Shimizu |
890ddd |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
NOT_LESS_THAN(0, img_x0)
|
|
Shinya Kitaoka |
120a6e |
NOT_LESS_THAN(0, img_y0)
|
|
Shinya Kitaoka |
120a6e |
NOT_MORE_THAN(img->pixmap.xsize - 1, img_x1)
|
|
Shinya Kitaoka |
120a6e |
NOT_MORE_THAN(img->pixmap.ysize - 1, img_y1)
|
|
Shinya Kitaoka |
120a6e |
assert(img_x0 <= img_x1);
|
|
Shinya Kitaoka |
120a6e |
assert(img_y0 <= img_y1);
|
|
Shinya Kitaoka |
120a6e |
memset(ras, 0, sizeof(*ras));
|
|
Shinya Kitaoka |
120a6e |
switch (img->type) {
|
|
Shinya Kitaoka |
120a6e |
CASE CMAPPED : ras->type = RAS_CM16;
|
|
Shinya Kitaoka |
120a6e |
?D 76 ras->buffer = (USHORT *)img->pixmap.buffer + img_x0
|
|
Toshihiro Shimizu |
890ddd |
?E 76
|
|
Toshihiro Shimizu |
890ddd |
?I 76 ras->native_buffer = ras->buffer = (USHORT *)img->pixmap.buffer + img_x0
|
|
Toshihiro Shimizu |
890ddd |
?E 76 + img_y0 * img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE CMAPPED24 : ras->type = RAS_CM24;
|
|
Shinya Kitaoka |
120a6e |
ras->native_buffer = ras->buffer =
|
|
Shinya Kitaoka |
120a6e |
(ULONG *)img->pixmap.buffer + img_x0 + img_y0 * img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
?E 84 CASE RGB : ras->type = RAS_RGBM;
|
|
Shinya Kitaoka |
120a6e |
?D 76 ras->buffer = (ULONG *)img->pixmap.buffer + img_x0
|
|
Toshihiro Shimizu |
890ddd |
?E 76
|
|
Toshihiro Shimizu |
890ddd |
?I 76
|
|
Toshihiro Shimizu |
890ddd |
?D 94 ras->native_buffer = ras->buffer = (ULONG *)img->pixmap.buffer + img_x0
|
|
Toshihiro Shimizu |
890ddd |
?E 94
|
|
Toshihiro Shimizu |
890ddd |
?I 94 ras->native_buffer = ras->buffer = (LPIXEL *)img->pixmap.buffer + img_x0
|
|
Toshihiro Shimizu |
890ddd |
?E 94
|
|
Toshihiro Shimizu |
890ddd |
?E 76 + img_y0 * img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
?I 94 CASE RGB64 : ras->type = RAS_RGBM64;
|
|
Shinya Kitaoka |
120a6e |
ras->native_buffer = ras->buffer =
|
|
Shinya Kitaoka |
120a6e |
(SPIXEL *)img->pixmap.buffer + img_x0 + img_y0 * img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
?E 94
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 ras->extra_mask = img->pixmap.extra_mask;
|
|
Shinya Kitaoka |
120a6e |
if (img->type != CMAPPED24 && img->pixmap.extra_mask)
|
|
Shinya Kitaoka |
120a6e |
ras->native_extra = ras->extra =
|
|
Shinya Kitaoka |
120a6e |
img->pixmap.extra + img_x0 + img_y0 * img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
ras->native_extra = ras->extra = NIL;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 89 ras->wrap = img->pixmap.xsize;
|
|
Shinya Kitaoka |
120a6e |
ras->lx = img_x1 - img_x0 + 1;
|
|
Shinya Kitaoka |
120a6e |
ras->ly = img_y1 - img_y0 + 1;
|
|
Shinya Kitaoka |
120a6e |
?D 56 ras->glob_matte = 0xff;
|
|
Shinya Kitaoka |
120a6e |
if (ras->type == RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 84 if (ras->type == RAS_CM8 || ras->type == RAS_CM16)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 if (ras->type == RAS_CM8 || ras->type == RAS_CM16 ||
|
|
Shinya Kitaoka |
120a6e |
ras->type == RAS_CM24)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 56 {
|
|
Shinya Kitaoka |
120a6e |
?D 56 ras->cmap.offset = img->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.size = img->cmap.size;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Shinya Kitaoka |
120a6e |
?D 82 ras->cmap.size = img->cmap.size;
|
|
Shinya Kitaoka |
120a6e |
?E 82 ras->cmap.info = img->cmap.info;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?D 79 if (build_cmap) {
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(ras->cmap.buffer, ras->cmap.size)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ras->cmap.size; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 60 ras->cmap.buffer[i].r = img->cmap.buffer[i].red;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g = img->cmap.buffer[i].green;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b = img->cmap.buffer[i].blue;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].m = img->cmap.buffer[i].matte;
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 ras->cmap.buffer[i].r = img->cmap.buffer[i].r;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g = img->cmap.buffer[i].g;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b = img->cmap.buffer[i].b;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].m = img->cmap.buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 79
|
|
Toshihiro Shimizu |
890ddd |
?I 79 if (get_cmap)
|
|
Toshihiro Shimizu |
890ddd |
?D 84 ras->cmap.buffer = img->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 {
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer = img->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.penbuffer = img->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.colbuffer = img->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 79 else ?D 84 ras->cmap.buffer = NIL;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 {
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer = NIL;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.penbuffer = NIL;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.colbuffer = NIL;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 40
|
|
Toshihiro Shimizu |
890ddd |
?E 26
|
|
Toshihiro Shimizu |
890ddd |
?E 22
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Toshihiro Shimizu |
890ddd |
?E 17
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 6
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 88
|
|
Shinya Kitaoka |
120a6e |
/* ATTENZIONE !!!!! Esiste una copia esatta di questa func
|
|
Shinya Kitaoka |
120a6e |
in sources/util/image/timage/timg.c, per evitare che la image dipenda dalla
|
|
Shinya Kitaoka |
120a6e |
raster; ogni modifica di questa va anche riportata li'. Vincenzo */
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 88 int
|
|
Shinya Kitaoka |
120a6e |
rop_pixbits(RAS_TYPE rastertype) {
|
|
Shinya Kitaoka |
120a6e |
?D 2
|
|
Shinya Kitaoka |
120a6e |
/* attenzione: appena entra il primo tipo non multiplo di 8 bits
|
|
Shinya Kitaoka |
120a6e |
* tutto il codice di questo pacchetto va ricontrollato da cima a fondo
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 2 switch (rastertype) {
|
|
Shinya Kitaoka |
120a6e |
?D 2 CASE RAS_BW : return 8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM : return 16;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2
|
|
Toshihiro Shimizu |
890ddd |
?D 39 CASE RAS_BW : return 1;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return 1;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?I 23 CASE RAS_CM8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?E 23 CASE RAS_CM16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB : return 24;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return 32;
|
|
Shinya Kitaoka |
120a6e |
?E 2 CASE RAS_RGBM : return 32;
|
|
Shinya Kitaoka |
120a6e |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
?I 39 CASE RAS_BW : return 1;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_MBW16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return 1;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?I 90 CASE RAS_GR16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?E 90 CASE RAS_CM8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?D 83 CASE RAS_UNICM8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?I 72 CASE RAS_CM8S8 : return 8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8S4 : return 8;
|
|
Shinya Kitaoka |
120a6e |
?E 72 CASE RAS_CM16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?I 98 CASE RAS_CM16S12 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?E 98
|
|
Toshihiro Shimizu |
890ddd |
?D 83 CASE RAS_UNICM16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?I 53 CASE RAS_RGB16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?I 72 CASE RAS_CM16S8 : return 16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16S4 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RAS_CM24 : return 32;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 83 CASE RAS_RGB16 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?I 96
|
|
Toshihiro Shimizu |
890ddd |
?D 97 CASE RAS_XRGB1555 : return 16;
|
|
Shinya Kitaoka |
120a6e |
?E 97
|
|
Toshihiro Shimizu |
890ddd |
?I 97 CASE RAS_RLEBW : return 1;
|
|
Shinya Kitaoka |
120a6e |
?E 97
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?E 72
|
|
Toshihiro Shimizu |
890ddd |
?E 53 CASE RAS_RGB : return 24;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return 32;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGBM : return 32;
|
|
Shinya Kitaoka |
120a6e |
?I 58 CASE RAS_RGBM64 : return 64;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_64 : return 64;
|
|
Shinya Kitaoka |
120a6e |
?E 58
|
|
Toshihiro Shimizu |
890ddd |
?E 39 DEFAULT : msg(MSG_IE, "rop_pixbits: invalid rastertype");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 3 return 0;
|
|
Shinya Kitaoka |
120a6e |
?E 3
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 39
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 39
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 9 int
|
|
Shinya Kitaoka |
120a6e |
rop_pixbytes(RAS_TYPE rastertype) {
|
|
Shinya Kitaoka |
120a6e |
return (rop_pixbits(rastertype) + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 9 int rop_fillerbits(RAS_TYPE rastertype) {
|
|
Shinya Kitaoka |
120a6e |
switch (rastertype) {
|
|
Shinya Kitaoka |
120a6e |
?D 2 CASE RAS_BW : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2
|
|
Toshihiro Shimizu |
890ddd |
?D 39 CASE RAS_BW : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?I 23 CASE RAS_CM8 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 23 CASE RAS_CM16 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 2 CASE RAS_RGBM : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
?I 39
|
|
Toshihiro Shimizu |
890ddd |
?D 84 CASE RAS_BW : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_MBW16 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?D 83 CASE RAS_UNICM8 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 83 CASE RAS_CM16 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?D 83 CASE RAS_UNICM16 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?I 53 CASE RAS_RGB16 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 53 CASE RAS_RGB : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGBM : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?I 59 CASE RAS_RGBM64 : return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 59
|
|
Toshihiro Shimizu |
890ddd |
?E 39 DEFAULT : msg(MSG_IE, "rop_fillerbits: invalid rastertype");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 CASE RAS_BW : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return TRUE;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
return FALSE;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 3 return 0;
|
|
Shinya Kitaoka |
120a6e |
?E 3
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 53 RAS_TYPE rop_standard_ras_type_of_pix_type(PIX_TYPE pix_type) {
|
|
Shinya Kitaoka |
120a6e |
switch (pix_type) {
|
|
Shinya Kitaoka |
120a6e |
?D 96 CASE PIX_NONE : return RAS_NONE;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_BW : return RAS_BW;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_WB : return RAS_WB;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_GR8 : return RAS_GR8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM8 : return RAS_CM8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM16 : return RAS_CM16;
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE PIX_CM24 : return RAS_CM24;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 72 CASE PIX_CM8S8 : return RAS_CM8S8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM8S4 : return RAS_CM8S4;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM16S8 : return RAS_CM16S8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM16S4 : return RAS_CM16S4;
|
|
Shinya Kitaoka |
120a6e |
?E 72 CASE PIX_RGB16 : return RAS_RGB16;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGB : return RAS_RGB;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGB_ : return RAS_RGB_;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGBM : return RAS_RGBM;
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?I 96 CASE PIX_NONE : return RAS_NONE;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_BW : return RAS_BW;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_WB : return RAS_WB;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_GR8 : return RAS_GR8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM8 : return RAS_CM8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM16 : return RAS_CM16;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM24 : return RAS_CM24;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM8S8 : return RAS_CM8S8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM8S4 : return RAS_CM8S4;
|
|
Shinya Kitaoka |
120a6e |
?I 98 CASE PIX_CM16S12 : return RAS_CM16S12;
|
|
Shinya Kitaoka |
120a6e |
?E 98 CASE PIX_CM16S8 : return RAS_CM16S8;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_CM16S4 : return RAS_CM16S4;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGB16 : return RAS_RGB16;
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE PIX_XRGB1555 : return RAS_XRGB1555;
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE PIX_RGB : return RAS_RGB;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGB_ : return RAS_RGB_;
|
|
Shinya Kitaoka |
120a6e |
CASE PIX_RGBM : return RAS_RGBM;
|
|
Shinya Kitaoka |
120a6e |
?E 96 DEFAULT :
|
|
Toshihiro Shimizu |
890ddd |
?D 63 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
return RAS_NONE;
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Toshihiro Shimizu |
890ddd |
?I 63
|
|
Toshihiro Shimizu |
890ddd |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 63
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 63 return RAS_NONE;
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
PIX_TYPE rop_pix_type_of_ras_type(RAS_TYPE ras_type) {
|
|
Shinya Kitaoka |
120a6e |
switch (ras_type) {
|
|
Shinya Kitaoka |
120a6e |
?D 96 CASE RAS_NONE : return PIX_NONE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : return PIX_BW;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return PIX_WB;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return PIX_GR8;
|
|
Shinya Kitaoka |
120a6e |
?I 90 CASE RAS_GR16 : return PIX_RGB16;
|
|
Shinya Kitaoka |
120a6e |
?E 90 CASE RAS_CM8 : return PIX_CM8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16 : return PIX_CM16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB16 : return PIX_RGB16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB : return PIX_RGB;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return PIX_RGB_;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGBM : return PIX_RGBM;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_MBW16 : return PIX_BW;
|
|
Shinya Kitaoka |
120a6e |
?D 83 CASE RAS_UNICM8 : return PIX_CM8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_UNICM16 : return PIX_CM16;
|
|
Shinya Kitaoka |
120a6e |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?I 72 CASE RAS_CM8S8 : return PIX_CM8S8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8S4 : return PIX_CM8S4;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16S8 : return PIX_CM16S8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16S4 : return PIX_CM16S4;
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RAS_CM24 : return PIX_CM24;
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?I 96 CASE RAS_NONE : return PIX_NONE;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : return PIX_BW;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : return PIX_WB;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR8 : return PIX_GR8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_GR16 : return PIX_RGB16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8 : return PIX_CM8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16 : return PIX_CM16;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB16 : return PIX_RGB16;
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE RAS_XRGB1555 : return PIX_XRGB1555;
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE RAS_RGB : return PIX_RGB;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGB_ : return PIX_RGB_;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_RGBM : return PIX_RGBM;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_MBW16 : return PIX_BW;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8S8 : return PIX_CM8S8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM8S4 : return PIX_CM8S4;
|
|
Shinya Kitaoka |
120a6e |
?I 98 CASE RAS_CM16S12 : return PIX_CM16S12;
|
|
Shinya Kitaoka |
120a6e |
?E 98 CASE RAS_CM16S8 : return PIX_CM16S8;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16S4 : return PIX_CM16S4;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM24 : return PIX_CM24;
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 72 DEFAULT :
|
|
Toshihiro Shimizu |
890ddd |
?D 63 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
return PIX_NONE;
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Toshihiro Shimizu |
890ddd |
?I 63
|
|
Toshihiro Shimizu |
890ddd |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 63
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 63 return PIX_NONE;
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 74 void rop_premultiply(RASTER *rin, RASTER *rout) {
|
|
Shinya Kitaoka |
120a6e |
int x, y, wrapin, wrapout, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *in, *out, val, transp;
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *in64, *out64, val64, transp64;
|
|
Shinya Kitaoka |
120a6e |
UINT m;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
#define MAGICFAC (257U * 256U + 1U)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
#define PREMULT(V, M) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
UINT mm = (M)*MAGICFAC; \
|
|
Shinya Kitaoka |
120a6e |
(V).r = ((V).r * mm + (1U << 23)) >> 24; \
|
|
Shinya Kitaoka |
120a6e |
(V).g = ((V).g * mm + (1U << 23)) >> 24; \
|
|
Shinya Kitaoka |
120a6e |
(V).b = ((V).b * mm + (1U << 23)) >> 24; \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define PREMULT64(V, M) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
double mf = (double)(M) * (1.0 / 65535.0); \
|
|
Shinya Kitaoka |
120a6e |
(V).r = (USHORT)((double)((V).r) * mf + 0.5); \
|
|
Shinya Kitaoka |
120a6e |
(V).g = (USHORT)((double)((V).g) * mf + 0.5); \
|
|
Shinya Kitaoka |
120a6e |
(V).b = (USHORT)((double)((V).b) * mf + 0.5); \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
assert(rin->lx == rout->lx && rin->ly == rout->ly);
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
lx = rin->lx;
|
|
Shinya Kitaoka |
120a6e |
ly = rin->ly;
|
|
Shinya Kitaoka |
120a6e |
switch (RASRAS(rin->type, rout->type)) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM64, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: transp64.r = transp64.g = transp64.b = transp64.m = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 75 for (y = ly; y > 0; y--)
|
|
Toshihiro Shimizu |
890ddd |
?E 75
|
|
Toshihiro Shimizu |
890ddd |
?I 75 for (y = 0; y < ly; y++)
|
|
Shinya Kitaoka |
120a6e |
?E 75 {
|
|
Shinya Kitaoka |
120a6e |
in64 = ((SPIXEL *)rin->buffer) + y * wrapin;
|
|
Shinya Kitaoka |
120a6e |
out64 = ((SPIXEL *)rout->buffer) + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
?D 75 for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
?E 75
|
|
Shinya Kitaoka |
120a6e |
?I 75 for (x = 0; x < lx; x++)
|
|
Shinya Kitaoka |
120a6e |
?E 75 {
|
|
Shinya Kitaoka |
120a6e |
val64 = *in64++;
|
|
Shinya Kitaoka |
120a6e |
m = val64.m;
|
|
Shinya Kitaoka |
120a6e |
if (!m) *out64++ = transp64;
|
|
Shinya Kitaoka |
120a6e |
?D 104 else if (m == 255U)
|
|
Toshihiro Shimizu |
890ddd |
?E 104
|
|
Toshihiro Shimizu |
890ddd |
?I 104 else if (m == 0xffff)
|
|
Shinya Kitaoka |
120a6e |
?E 104 *out64++ = val64;
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
PREMULT64(val64, m)
|
|
Shinya Kitaoka |
120a6e |
*out64++ = val64;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: transp.r = transp.g = transp.b = transp.m = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 75 for (y = ly; y > 0; y--)
|
|
Toshihiro Shimizu |
890ddd |
?E 75
|
|
Toshihiro Shimizu |
890ddd |
?I 75 for (y = 0; y < ly; y++)
|
|
Shinya Kitaoka |
120a6e |
?E 75 {
|
|
Shinya Kitaoka |
120a6e |
in = ((LPIXEL *)rin->buffer) + y * wrapin;
|
|
Shinya Kitaoka |
120a6e |
out = ((LPIXEL *)rout->buffer) + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
?D 75 for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
?E 75
|
|
Toshihiro Shimizu |
890ddd |
?I 75 for (x = 0; x < lx; x++)
|
|
Shinya Kitaoka |
120a6e |
?E 75 {
|
|
Shinya Kitaoka |
120a6e |
val = *in++;
|
|
Shinya Kitaoka |
120a6e |
m = val.m;
|
|
Shinya Kitaoka |
120a6e |
if (!m)
|
|
Shinya Kitaoka |
120a6e |
*out++ = transp;
|
|
Shinya Kitaoka |
120a6e |
else if (m == 255U)
|
|
Shinya Kitaoka |
120a6e |
*out++ = val;
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
PREMULT(val, m)
|
|
Shinya Kitaoka |
120a6e |
*out++ = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_extra(rin, rout, 0, 0, lx - 1, ly - 1, 0, 0);
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 74
|
|
Toshihiro Shimizu |
890ddd |
?E 53
|
|
Shinya Kitaoka |
120a6e |
?I 41 static void rop_copy_same(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *rowout;
|
|
Shinya Kitaoka |
120a6e |
int rowsize, bytewrapin, bytewrapout, d;
|
|
Shinya Kitaoka |
120a6e |
int pixbits_in, pixbits_out;
|
|
Shinya Kitaoka |
120a6e |
int pixbytes_in, pixbytes_out;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 104 if (((rin->type == RAS_BW) && (rout->type == RAS_BW)) ||
|
|
Shinya Kitaoka |
120a6e |
((rin->type == RAS_WB) && (rout->type == RAS_WB))) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 104 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_in = rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_out = rop_pixbytes(rout->type);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* pixsize compatibili */
|
|
Shinya Kitaoka |
120a6e |
assert(pixbits_in == pixbits_out);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* per adesso niente pixel non multipli di 8 bits */
|
|
Shinya Kitaoka |
120a6e |
assert(!rop_fillerbits(rin->type));
|
|
Shinya Kitaoka |
120a6e |
assert(!rop_fillerbits(rout->type));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* copia */
|
|
Shinya Kitaoka |
120a6e |
rowsize = pixbytes_in * (x2 - x1 + 1);
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = rin->wrap * pixbytes_in;
|
|
Shinya Kitaoka |
120a6e |
bytewrapout = rout->wrap * pixbytes_out;
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
|
|
Shinya Kitaoka |
120a6e |
d = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
while (d-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
memmove(rowout, rowin, rowsize);
|
|
Shinya Kitaoka |
120a6e |
rowin += bytewrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += bytewrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rin->type == RAS_CM24 && rout->type == RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + x2 - x1,
|
|
Shinya Kitaoka |
120a6e |
newy + y2 - y1, rin)
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_copy_extra(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *rowout, *pixin, *pixout;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin24, *rowout24, *pixin24, *pixout24;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, x, y, lx, ly, tmp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!rout->extra_mask) return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
if (rin->extra_mask) {
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
rowin24 = (ULONG *)rin->buffer + x1 + y1 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (rout->type == RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
rowout24 = (ULONG *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin24 = rowin24;
|
|
Shinya Kitaoka |
120a6e |
pixout24 = rowout24;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout24 = *pixout24 & 0x00ffffff | *pixin24 & 0xff000000;
|
|
Shinya Kitaoka |
120a6e |
pixin24++;
|
|
Shinya Kitaoka |
120a6e |
pixout24++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin24 += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout24 += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
rowout = rout->extra + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin24 = rowin24;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout = (UCHAR)(*pixin24 >> 24);
|
|
Shinya Kitaoka |
120a6e |
pixin24++;
|
|
Shinya Kitaoka |
120a6e |
pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin24 += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
rowin = rin->extra + x1 + y1 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (rout->type == RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
rowout24 = (ULONG *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout24 = rowout24;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout24 = *pixout24 & 0x00ffffff | *pixin << 24;
|
|
Shinya Kitaoka |
120a6e |
pixin++;
|
|
Shinya Kitaoka |
120a6e |
pixout24++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout24 += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
rowout = rout->extra + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++) {
|
|
Shinya Kitaoka |
120a6e |
memmove(rowout, rowin, lx);
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
|
|
Shinya Kitaoka |
120a6e |
rin)
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 41
|
|
Shinya Kitaoka |
120a6e |
?I 18 static void rop_copy_gr8_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL tmp;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
tmp.r = *pixin;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *pixin;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *pixin;
|
|
Shinya Kitaoka |
120a6e |
tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
pixin++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_gr8_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int factor) {
|
|
Shinya Kitaoka |
120a6e |
printf("rop_reduce_gr8_rgbm not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 28
|
|
Toshihiro Shimizu |
890ddd |
static void rop_zoom_out_gr8_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy, int abs_zoom_level)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 47 printf("rop_zoom_out_gr8_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
?I 47 UCHAR *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
?E 18
|
|
Shinya Kitaoka |
120a6e |
?D 2 static void rop_copy_cm_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 2
|
|
Shinya Kitaoka |
120a6e |
?I 2 static void rop_copy_cm16_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy)
|
|
Shinya Kitaoka |
120a6e |
?E 2 {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *cmap;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
?D 18 int wrapin, wrapout, tmp, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 18
|
|
Toshihiro Shimizu |
890ddd |
?I 18
|
|
Toshihiro Shimizu |
890ddd |
?D 29 int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?E 18 int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rin->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
?D 2 printf("### INTERNAL ERROR - rop_copy_2_4; missing color map\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2 printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; missing color map\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?D 29 cmap = rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset = rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?E 29 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?D 8 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
?I 8
|
|
Shinya Kitaoka |
120a6e |
?D 10 if ((rin->wrap % sizeof(USHORT)) || (rout->wrap % sizeof(LPIXEL))) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; bad wrap\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap / sizeof(USHORT);
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap / sizeof(LPIXEL);
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 2 rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Shinya Kitaoka |
120a6e |
?I 2 rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++)
|
|
Shinya Kitaoka |
120a6e |
?D 29 *pixout++ = cmap[*pixin++ - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29 *pixout++ = cmap[*pixin++];
|
|
Shinya Kitaoka |
120a6e |
?E 29 rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 4
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 84 static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_cm24_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout, *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, valin;
|
|
Shinya Kitaoka |
120a6e |
?I 89 UCHAR *exrow, *expix;
|
|
Shinya Kitaoka |
120a6e |
?E 89 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?D 89 int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 int x, lx, ly, lines;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?I 89 lines = ly;
|
|
Shinya Kitaoka |
120a6e |
?E 89 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 89 while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 if (rin->extra_mask & rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
?E 89 {
|
|
Shinya Kitaoka |
120a6e |
?D 89 pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 exrow = rout->extra + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
expix = exrow;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
*expix++ = (UCHAR)(valin >> 24);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
exrow += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 else while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
|
|
Shinya Kitaoka |
120a6e |
rin)
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 58 static void rop_copy_cm16_rgbm64(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap, src_pix;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rin->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_cm16_rgbm; missing color map\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
src_pix = cmap[*pixin++];
|
|
Shinya Kitaoka |
120a6e |
?D 60 ROP_RGBM_TO_RGBM64(src_pix, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?I 60 PIX_RGBM_TO_RGBM64(src_pix, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 60 pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_cm24_rgbm64(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, valin;
|
|
Shinya Kitaoka |
120a6e |
?I 89 UCHAR *exrow, *expix;
|
|
Shinya Kitaoka |
120a6e |
?E 89 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?D 89 int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 int x, lx, ly, lines;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?I 89 lines = ly;
|
|
Shinya Kitaoka |
120a6e |
?E 89 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 89 while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 if (rin->extra_mask && rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
?E 89 {
|
|
Shinya Kitaoka |
120a6e |
?D 89 pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 exrow = rout->extra + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
expix = exrow;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
*expix++ = (UCHAR)(valin >> 24);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
exrow += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 else while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CLEAR_NEW_EXTRA_BITS_OF_RECT(rout, newx, newy, newx + lx - 1, newy + ly - 1,
|
|
Shinya Kitaoka |
120a6e |
rin)
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_rgbm_rgbm64(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 65
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
?I 65
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (SPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
?D 60 ROP_RGBM_TO_RGBM64(*pixin, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?I 60 PIX_RGBM_TO_RGBM64(*pixin, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 60 pixin++;
|
|
Shinya Kitaoka |
120a6e |
pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_rgbm64_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 65
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
?I 65
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
?I 65
|
|
Toshihiro Shimizu |
890ddd |
?D 66 UINT random_round;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define BYTE_FROM_USHORT_CUSTOM_ROUNDED(X, R) \
|
|
Shinya Kitaoka |
120a6e |
((((X)*BYTE_FROM_USHORT_MAGICFAC) + (R)) >> 24)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define RGBM64_TO_RGBM_CUSTOM_ROUNDED(S, L, R) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
(L).r = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).r, (R)); \
|
|
Shinya Kitaoka |
120a6e |
(L).g = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).g, (R)); \
|
|
Shinya Kitaoka |
120a6e |
(L).b = BYTE_FROM_USHORT_CUSTOM_ROUNDED((S).b, (R)); \
|
|
Shinya Kitaoka |
120a6e |
(L).m = PIX_BYTE_FROM_USHORT((S).m); \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 66 tnz_random_seed(180461);
|
|
Shinya Kitaoka |
120a6e |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?I 66 PIX_INIT_DITHER_RGBM64_TO_RGBM
|
|
Toshihiro Shimizu |
890ddd |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
?D 60 ROP_RGBM64_TO_RGBM(*pixin, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?I 60
|
|
Toshihiro Shimizu |
890ddd |
?D 65 PIX_RGBM64_TO_RGBM(*pixin, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
?I 65
|
|
Toshihiro Shimizu |
890ddd |
?D 66 random_round = tnz_random_uint();
|
|
Shinya Kitaoka |
120a6e |
random_round &= (1U << 24) - 1;
|
|
Shinya Kitaoka |
120a6e |
RGBM64_TO_RGBM_CUSTOM_ROUNDED(*pixin, *pixout, random_round)
|
|
Shinya Kitaoka |
120a6e |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?I 66 PIX_DITHER_RGBM64_TO_RGBM(*pixin, *pixout)
|
|
Toshihiro Shimizu |
890ddd |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?E 65
|
|
Toshihiro Shimizu |
890ddd |
?E 60 pixin++;
|
|
Shinya Kitaoka |
120a6e |
pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 95 static void rop_copy_rgbx64_rgbx(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
UINT random_round;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
PIX_INIT_DITHER_RGBM64_TO_RGBM
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
random_round = tnz_random_uint() & ((1U << 24) - 1);
|
|
Shinya Kitaoka |
120a6e |
pixout->r = PIX_DITHER_BYTE_FROM_USHORT(pixin->r, random_round);
|
|
Shinya Kitaoka |
120a6e |
pixout->g = PIX_DITHER_BYTE_FROM_USHORT(pixin->g, random_round);
|
|
Shinya Kitaoka |
120a6e |
pixout->b = PIX_DITHER_BYTE_FROM_USHORT(pixin->b, random_round);
|
|
Shinya Kitaoka |
120a6e |
pixout->m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
pixin++;
|
|
Shinya Kitaoka |
120a6e |
pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 95
|
|
Toshihiro Shimizu |
890ddd |
?E 58
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_cm16_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm16_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 28 printf("rop_reduce_cm16_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?I 28
|
|
Toshihiro Shimizu |
890ddd |
?D 84 USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 USHORT *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
?E 84 LPIXEL *rowout, *pixout, *cmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
?D 29 int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 29 int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
?I 84 int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?E 84 int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
?I 84 int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 29 cmap = rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset = rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?E 29 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?I 84 factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
?I 84 fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
?E 84 yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?I 84 valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 84 for (j = 0; j < factor; j++) for (i = 0; i < factor; i++)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
?I 84 in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 84 valout.r = (tmp_r + fac_fac_2) / fac_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_2) / fac_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_2) / fac_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_fac_2) / fac_fac;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?E 84 *pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_zoom_out_cm16_rgbm(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm24_rgbm(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31 int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 31 {
|
|
Shinya Kitaoka |
120a6e |
?D 31 printf(" rop_zoom_out_cm16_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31
|
|
Shinya Kitaoka |
120a6e |
?D 84 USHORT *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *cmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 ULONG *rowin, *pixin, *in, win;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *penmap, *colmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
?E 84 int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56
|
|
Shinya Kitaoka |
120a6e |
?D 84 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 56 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84 rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
?E 84 rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 win = *in;
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
?E 84 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
?D 38 in += factor;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
?E 38
|
|
Shinya Kitaoka |
120a6e |
?I 38 in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
?E 38
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 win = *in;
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
?E 84 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
?D 38 in -= factor;
|
|
Shinya Kitaoka |
120a6e |
?E 38
|
|
Shinya Kitaoka |
120a6e |
?I 38 in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 38 in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
?E 84 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
?E 84 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
?E 84 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 46 static void rop_reduce_cm16_rgb_(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Shinya Kitaoka |
120a6e |
?I 46
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_cm16_rgbx(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?E 46 int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm16_rgbx(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 USHORT *rowin, *pixin;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 USHORT *rowin, *pixin, *in;
|
|
Toshihiro Shimizu |
890ddd |
?E 84 LPIXEL *rowout, *pixout, *cmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
?D 84 int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?D 29 int wrapin, wrapout, cmap_offset;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29 int wrapin, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
?E 29 int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Toshihiro Shimizu |
890ddd |
?I 84 int factor, fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
?E 84 int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Toshihiro Shimizu |
890ddd |
?I 84 int fac_fac_4;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 29 cmap = rin->cmap.buffer;
|
|
Toshihiro Shimizu |
890ddd |
cmap_offset = rin->cmap.offset;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?E 29 lx = x2 - x1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
ly = y2 - y1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
?I 84 factor = 1 << abs_zoom_level;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?D 61 xrest = lx % factor;
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly % factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61 xrest = lx & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
?E 61 xlast = x2 - xrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
ylast = y2 - yrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac = factor * factor;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_2 = fac_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
?I 84 fac_fac_4 = fac_fac >> 2;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Toshihiro Shimizu |
890ddd |
?E 84 yrest_fac = yrest * factor;
|
|
Toshihiro Shimizu |
890ddd |
yrest_fac_2 = yrest_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_xrest = factor * xrest;
|
|
Toshihiro Shimizu |
890ddd |
fac_xrest_2 = fac_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_xrest = yrest * xrest;
|
|
Toshihiro Shimizu |
890ddd |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
for (y = y1; y < ylast; y += factor) {
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j += 2) {
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i += 2)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 84 valin = cmap[pixin[i + j * wrapin]];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 valin = cmap[*in];
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
in += wrapin;
|
|
Toshihiro Shimizu |
890ddd |
in++;
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[*in];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 29 tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
?I 84 in -= wrapin;
|
|
Toshihiro Shimizu |
890ddd |
in++;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?D 84 valout.r = (tmp_r + fac_fac_2) / fac_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_fac_2) / fac_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_fac_2) / fac_fac;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 in += 2 * wrapin - factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
pixin += factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84 for (j = 0; j < factor; j++) for (i = 0; i < xrest; i++)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin * factor;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (yrest) {
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84 for (j = 0; j < yrest; j++) for (i = 0; i < factor; i++)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
pixin += factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
?D 84 tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 84 for (j = 0; j < yrest; j++) for (i = 0; i < xrest; i++)
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
?D 29 valin = cmap[pixin[i + j * wrapin] - cmap_offset];
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29 valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
?E 29 tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 46 static void rop_zoom_out_cm16_rgb_(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Shinya Kitaoka |
120a6e |
?I 46
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_zoom_out_cm16_rgbx(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm24_rgbx(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 46 int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
?D 29
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
?D 84
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *cmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, *in, win;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *penmap, *colmap, valin, valout;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?D 46
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Shinya Kitaoka |
120a6e |
?I 46
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Shinya Kitaoka |
120a6e |
?D 29
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
?D 29
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_bits;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
int fac_fac , yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 29
|
|
Shinya Kitaoka |
120a6e |
cmap=rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset=rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 29
|
|
Shinya Kitaoka |
120a6e |
?I 29
|
|
Shinya Kitaoka |
120a6e |
?D 56
|
|
Shinya Kitaoka |
120a6e |
cmap=rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
cmap=rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
penmap=rin->cmap.penbuffer;
|
|
Toshihiro Shimizu |
890ddd |
colmap=rin->cmap.colbuffer;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
factor = 1 << abs_zoom_level;
|
|
Toshihiro Shimizu |
890ddd |
?D 61
|
|
Toshihiro Shimizu |
890ddd |
xrest = lx % factor;
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly % factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61
|
|
Toshihiro Shimizu |
890ddd |
xrest = lx & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
xlast = x2 - xrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
ylast = y2 - yrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac = factor * factor; fac_fac_2 = fac_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_bits= 2 * abs_zoom_level;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_4 = fac_fac >> 2; fac_fac_2_bits= 2 * abs_zoom_level - 1;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
yrest_fac = yrest * factor; yrest_fac_2 = yrest_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_xrest = factor * xrest; fac_xrest_2 = fac_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_xrest = yrest * xrest; yrest_xrest_2 = yrest_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin ->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
valout.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
rowin = (USHORT*)rin->buffer + wrapin*y1 + x1;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
rowin = (ULONG *)rin->buffer + wrapin*y1 + x1;
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
for (y = y1; y < ylast; y += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
in = pixin;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j+=2)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i+=2)
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin] - cmap_offset];
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[*in];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
win = *in;
|
|
Toshihiro Shimizu |
890ddd |
MAP24 (win, penmap, colmap, valin)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 38
|
|
Toshihiro Shimizu |
890ddd |
in += factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 38
|
|
Toshihiro Shimizu |
890ddd |
?I 38
|
|
Toshihiro Shimizu |
890ddd |
in += wrapin;
|
|
Toshihiro Shimizu |
890ddd |
?E 38
|
|
Toshihiro Shimizu |
890ddd |
in++;
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[*in];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
win = *in;
|
|
Toshihiro Shimizu |
890ddd |
MAP24 (win, penmap, colmap, valin)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
?D 38
|
|
Toshihiro Shimizu |
890ddd |
in -= factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 38
|
|
Toshihiro Shimizu |
890ddd |
?I 38
|
|
Toshihiro Shimizu |
890ddd |
in -= wrapin;
|
|
Toshihiro Shimizu |
890ddd |
?E 38
|
|
Toshihiro Shimizu |
890ddd |
in++;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_fac_2) >> fac_fac_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_fac_2) >> fac_fac_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_fac_2) >> fac_fac_bits;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
in += 2 * wrapin - factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
pixin += factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin] - cmap_offset];
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin]];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
win = pixin[i + j*wrapin];
|
|
Toshihiro Shimizu |
890ddd |
MAP24 (win, penmap, colmap, valin)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin * factor;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (yrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin] - cmap_offset];
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin]];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
win = pixin[i + j*wrapin];
|
|
Toshihiro Shimizu |
890ddd |
MAP24 (win, penmap, colmap, valin)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
pixin += factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin] - cmap_offset];
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
valin = cmap[pixin[i + j*wrapin]];
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
win = pixin[i + j*wrapin];
|
|
Toshihiro Shimizu |
890ddd |
MAP24 (win, penmap, colmap, valin)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += valin.r;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += valin.g;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += valin.b;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 28 }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 81 static void rop_copy_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
|
|
Toshihiro Shimizu |
890ddd |
USHORT *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *pixin;
|
|
Toshihiro Shimizu |
890ddd |
int bytewrapin, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
bytewrapin = rin ->wrap * 3;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*) rin ->buffer + bytewrapin * y1 + x1 * 3;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (USHORT*)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
while(ly-->0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin=rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout=rowout;
|
|
Toshihiro Shimizu |
890ddd |
for(x=0;x
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = PIX_RGB16_FROM_BYTES(pixin[0], pixin[1], pixin[2]);
|
|
Toshihiro Shimizu |
890ddd |
pixin += 3;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin+=bytewrapin;
|
|
Toshihiro Shimizu |
890ddd |
rowout+=wrapout;
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
?I 18 static void rop_copy_rgb_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *pixin;
|
|
Toshihiro Shimizu |
890ddd |
?D 81
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?I 81
|
|
Toshihiro Shimizu |
890ddd |
int bytewrapin, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL tmp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
?D 81
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin ->wrap * 3;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?I 81
|
|
Toshihiro Shimizu |
890ddd |
bytewrapin = rin ->wrap * 3;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 24
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*) rin ->buffer + wrapin*y1 + x1;
|
|
Toshihiro Shimizu |
890ddd |
?E 24
|
|
Toshihiro Shimizu |
890ddd |
?I 24
|
|
Toshihiro Shimizu |
890ddd |
?D 81
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*) rin ->buffer + wrapin*y1 + x1 * 3;
|
|
Toshihiro Shimizu |
890ddd |
?E 24
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?I 81
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*) rin ->buffer + bytewrapin * y1 + x1 * 3;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL*)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 45
|
|
Toshihiro Shimizu |
890ddd |
tmp.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
?E 45
|
|
Toshihiro Shimizu |
890ddd |
while(ly-->0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin=rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout=rowout;
|
|
Toshihiro Shimizu |
890ddd |
for(x=0;x
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp.r = *pixin++;
|
|
Toshihiro Shimizu |
890ddd |
tmp.g = *pixin++;
|
|
Toshihiro Shimizu |
890ddd |
tmp.b = *pixin++;
|
|
Toshihiro Shimizu |
890ddd |
?D 45
|
|
Toshihiro Shimizu |
890ddd |
tmp.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
?E 45
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = tmp;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?D 81
|
|
Toshihiro Shimizu |
890ddd |
rowin+=wrapin;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?I 81
|
|
Toshihiro Shimizu |
890ddd |
rowin+=bytewrapin;
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
rowout+=wrapout;
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 67 static void rop_copy_rgbx_rgb(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *rowin, *pixin;
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin ->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap * 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (LPIXEL*) rin ->buffer + wrapin*y1 + x1;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (UCHAR*)rout->buffer + wrapout*newy + newx * 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
while(ly-->0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin=rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout=rowout;
|
|
Toshihiro Shimizu |
890ddd |
for(x=0;x
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = pixin->b;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = pixin->g;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = pixin->r;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin+=wrapin;
|
|
Toshihiro Shimizu |
890ddd |
rowout+=wrapout;
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 81
|
|
Toshihiro Shimizu |
890ddd |
?D 84 static void rop_reduce_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_rgb_rgb16 not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?E 67
|
|
Toshihiro Shimizu |
890ddd |
?I 20 static void rop_reduce_rgb_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_rgb_rgbm not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 81 static void rop_zoom_out_rgb_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) {
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *pixin, *in;
|
|
Toshihiro Shimizu |
890ddd |
USHORT *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
int tmp_r, tmp_g, tmp_b;
|
|
Toshihiro Shimizu |
890ddd |
int wrapin_pixels, wrapin_bytes, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Toshihiro Shimizu |
890ddd |
int factor, fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac , yrest_fac, fac_xrest, yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac_4;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
factor = 1 << abs_zoom_level;
|
|
Toshihiro Shimizu |
890ddd |
xrest = lx & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
xlast = x2 - xrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
ylast = y2 - yrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac = factor * factor; fac_fac_2 = fac_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_4 = fac_fac >> 2; fac_fac_2_bits= 2 * abs_zoom_level - 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_fac = yrest * factor; yrest_fac_2 = yrest_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_xrest = factor * xrest; fac_xrest_2 = fac_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_xrest = yrest * xrest; yrest_xrest_2 = yrest_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin_pixels = rin->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapin_bytes = wrapin_pixels * 3;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR *)rin->buffer + wrapin_bytes * y1 + 3 * x1;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (USHORT*)rout->buffer + wrapout * newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
for (y = y1; y < ylast; y += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
in = pixin;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j+=2)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i+=2)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += *in++;
|
|
Toshihiro Shimizu |
890ddd |
in += wrapin_bytes;
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += *in++;
|
|
Toshihiro Shimizu |
890ddd |
in -= wrapin_bytes;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
in += 6 * wrapin_pixels - 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
|
|
Toshihiro Shimizu |
890ddd |
pixin += 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin_bytes * factor;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (yrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
|
|
Toshihiro Shimizu |
890ddd |
pixin += 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = PIX_RGB16_FROM_BYTES (tmp_r, tmp_g, tmp_b);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?I 28 static void rop_zoom_out_rgb_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31 int x1,
|
|
Toshihiro Shimizu |
890ddd |
int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
|
|
Toshihiro Shimizu |
890ddd |
?E 31 {
|
|
Toshihiro Shimizu |
890ddd |
?D 48
|
|
Toshihiro Shimizu |
890ddd |
printf ("rop_zoom_out_rgb_rgbm not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
?E 48
|
|
Toshihiro Shimizu |
890ddd |
?I 48
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *pixin, *in;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *rowout, *pixout, valout;
|
|
Toshihiro Shimizu |
890ddd |
int tmp_r, tmp_g, tmp_b;
|
|
Toshihiro Shimizu |
890ddd |
int wrapin_pixels, wrapin_bytes, wrapout;
|
|
Toshihiro Shimizu |
890ddd |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Toshihiro Shimizu |
890ddd |
int factor, fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac , yrest_fac, fac_xrest, yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Toshihiro Shimizu |
890ddd |
int fac_fac_4;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
factor = 1 << abs_zoom_level;
|
|
Toshihiro Shimizu |
890ddd |
?D 61
|
|
Toshihiro Shimizu |
890ddd |
xrest = lx % factor;
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly % factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61
|
|
Toshihiro Shimizu |
890ddd |
xrest = lx & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
yrest = ly & (factor - 1);
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
xlast = x2 - xrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
ylast = y2 - yrest + 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac = factor * factor; fac_fac_2 = fac_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_fac_4 = fac_fac >> 2; fac_fac_2_bits= 2 * abs_zoom_level - 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_fac = yrest * factor; yrest_fac_2 = yrest_fac >> 1;
|
|
Toshihiro Shimizu |
890ddd |
fac_xrest = factor * xrest; fac_xrest_2 = fac_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
yrest_xrest = yrest * xrest; yrest_xrest_2 = yrest_xrest >> 1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin_pixels = rin->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapin_bytes = wrapin_pixels * 3;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
valout.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR *)rin->buffer + wrapin_bytes*y1 + 3*x1;
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
for (y = y1; y < ylast; y += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
in = pixin;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j+=2)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i+=2)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += *in++;
|
|
Toshihiro Shimizu |
890ddd |
in += wrapin_bytes;
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += *in++;
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += *in++;
|
|
Toshihiro Shimizu |
890ddd |
in -= wrapin_bytes;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
in += 6 * wrapin_pixels - 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
pixin += 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < factor; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin_bytes * factor;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (yrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
pixin = rowin;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = x1; x < xlast; x += factor)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < factor; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = valout;
|
|
Toshihiro Shimizu |
890ddd |
?D 49
|
|
Toshihiro Shimizu |
890ddd |
pixin += factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 49
|
|
Toshihiro Shimizu |
890ddd |
?I 49
|
|
Toshihiro Shimizu |
890ddd |
pixin += 3 * factor;
|
|
Toshihiro Shimizu |
890ddd |
?E 49
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (xrest)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r = tmp_g = tmp_b = 0;
|
|
Toshihiro Shimizu |
890ddd |
for (j = 0; j < yrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
for (i = 0; i < xrest; i++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
tmp_r += pixin[3*i + j*wrapin_bytes];
|
|
Toshihiro Shimizu |
890ddd |
tmp_g += pixin[3*i + j*wrapin_bytes + 1];
|
|
Toshihiro Shimizu |
890ddd |
tmp_b += pixin[3*i + j*wrapin_bytes + 2];
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Toshihiro Shimizu |
890ddd |
*pixout = valout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 48 }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 68
|
|
Toshihiro Shimizu |
890ddd |
?D 69 static void rop_copy_bw_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
?I 69 static void rop_copy_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 69 {
|
|
Toshihiro Shimizu |
890ddd |
UINT mask;
|
|
Toshihiro Shimizu |
890ddd |
?D 69
|
|
Toshihiro Shimizu |
890ddd |
int yin, yout, byte, byte1, byte2, newbyte, bytewrapin, bytewrapout;
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
?I 69
|
|
Toshihiro Shimizu |
890ddd |
int yin, yout, byte, byte1, byte2, newbyte, bytewrapin, bytewrapout, rest;
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *bytein, *byteout;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 69
|
|
Toshihiro Shimizu |
890ddd |
if ((x1 & 7) || ((x2 + 1) & 7))
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
?I 69
|
|
Toshihiro Shimizu |
890ddd |
if ((x1 & 7) || (newx & 7))
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 69
|
|
Toshihiro Shimizu |
890ddd |
msg (MSG_IE, "rop_copy_bw_bw: x coordinates must be multiples of 8");
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
?I 69
|
|
Toshihiro Shimizu |
890ddd |
rop_copy_90_bw (rin, rout, x1, y1, x2, y2, newx, newy, FALSE, 0);
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
mask = rin->type == rout->type ? 0x0 : 0xff;
|
|
Toshihiro Shimizu |
890ddd |
byte1 = x1 >> 3;
|
|
Toshihiro Shimizu |
890ddd |
byte2 = ((x2 + 1) >> 3) - 1;
|
|
Toshihiro Shimizu |
890ddd |
?I 69
|
|
Toshihiro Shimizu |
890ddd |
rest = (x2 + 1) & 7;
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
newbyte = newx >> 3;
|
|
Toshihiro Shimizu |
890ddd |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
bytewrapout = (rout->wrap + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
for (yin = y1, yout = newy; yin <= y2; yin++, yout++)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein = (UCHAR *)rin->buffer + yin * bytewrapin + byte1;
|
|
Toshihiro Shimizu |
890ddd |
byteout = (UCHAR *)rout->buffer + yout * bytewrapout + newbyte;
|
|
Toshihiro Shimizu |
890ddd |
if (mask)
|
|
Toshihiro Shimizu |
890ddd |
for (byte = byte1; byte <= byte2; byte++)
|
|
Toshihiro Shimizu |
890ddd |
*byteout++ = *bytein++ ^ mask;
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
for (byte = byte1; byte <= byte2; byte++)
|
|
Toshihiro Shimizu |
890ddd |
*byteout++ = *bytein++;
|
|
Toshihiro Shimizu |
890ddd |
?I 69
|
|
Toshihiro Shimizu |
890ddd |
if (rest)
|
|
Toshihiro Shimizu |
890ddd |
*byteout |= (*bytein ^ mask) & (~0U << (7 - rest));
|
|
Toshihiro Shimizu |
890ddd |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
?E 18 static void rop_copy_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *bytein;
|
|
Toshihiro Shimizu |
890ddd |
USHORT *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *cmap;
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
?D 21
|
|
Toshihiro Shimizu |
890ddd |
int i_0, i_1, i_t;
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Toshihiro Shimizu |
890ddd |
?I 21
|
|
Toshihiro Shimizu |
890ddd |
USHORT i_0, i_1, i_t;
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
?D 18
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout, tmp, cmap_offset, bit, bit_offs, startbit;
|
|
Toshihiro Shimizu |
890ddd |
?E 18
|
|
Toshihiro Shimizu |
890ddd |
?I 18
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout, cmap_offset, bit, bit_offs, startbit;
|
|
Toshihiro Shimizu |
890ddd |
?E 18
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
?D 5
|
|
Toshihiro Shimizu |
890ddd |
int reversed;
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 68
|
|
Toshihiro Shimizu |
890ddd |
if(!rout->cmap.buffer)
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Toshihiro Shimizu |
890ddd |
?I 68
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
if ( !rout->cmap.buffer)
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 68
|
|
Toshihiro Shimizu |
890ddd |
msg (MSG_IE, "rop_copy_bw_cm16: missing color map");
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Toshihiro Shimizu |
890ddd |
?I 68
|
|
Toshihiro Shimizu |
890ddd |
msg (MSG_IE, "rop_copy_bw_cm16: missing color map");
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
cmap=rout->cmap.buffer;
|
|
Toshihiro Shimizu |
890ddd |
?D 56
|
|
Toshihiro Shimizu |
890ddd |
cmap_offset=rout->cmap.offset;
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
cmap_offset=rout->cmap.info.offset_mask;
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?D 5
|
|
Toshihiro Shimizu |
890ddd |
switch (rin->type)
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
if (cmap[0].r==0)
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 5
|
|
Toshihiro Shimizu |
890ddd |
CASE RAS_BW: reversed = cmap[0].r!=0;
|
|
Toshihiro Shimizu |
890ddd |
CASE RAS_WB: reversed = cmap[0].r==0;
|
|
Toshihiro Shimizu |
890ddd |
DEFAULT: msg (MSG_IE, "rop_copy_bw_cm16: invalid rastertype");
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
i_0 = cmap_offset;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = cmap_offset + 255;
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
i_0 = cmap_offset + 255;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = cmap_offset;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (rin->type==RAS_WB)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
i_t = i_0;
|
|
Toshihiro Shimizu |
890ddd |
i_0 = i_1;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = i_t;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
?D 8
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin->wrap;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
?I 8
|
|
Toshihiro Shimizu |
890ddd |
?D 10
|
|
Toshihiro Shimizu |
890ddd |
if ((rin->wrap % sizeof(UCHAR)) || (rout->wrap % sizeof(USHORT)))
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
printf("### INTERNAL ERROR - rop_copy_bw_cm16; bad wrap\n");
|
|
Toshihiro Shimizu |
890ddd |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin->wrap / sizeof(UCHAR);
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap / sizeof(USHORT);
|
|
Toshihiro Shimizu |
890ddd |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
bit_offs = rin->bit_offs;
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10
|
|
Toshihiro Shimizu |
890ddd |
?D 16
|
|
Toshihiro Shimizu |
890ddd |
wrapin = rin ->wrap / 8;
|
|
Toshihiro Shimizu |
890ddd |
?E 16
|
|
Toshihiro Shimizu |
890ddd |
?I 16
|
|
Toshihiro Shimizu |
890ddd |
?D 47
|
|
Toshihiro Shimizu |
890ddd |
wrapin = (rin->wrap + 7) / 8;
|
|
Toshihiro Shimizu |
890ddd |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
?I 47
|
|
Toshihiro Shimizu |
890ddd |
wrapin = (rin->wrap + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
?E 16
|
|
Toshihiro Shimizu |
890ddd |
bit_offs = rin ->bit_offs;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
|
|
Toshihiro Shimizu |
890ddd |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Toshihiro Shimizu |
890ddd |
rowout = (USHORT*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein = rowin;
|
|
Toshihiro Shimizu |
890ddd |
bit = startbit;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
?D 5
|
|
Toshihiro Shimizu |
890ddd |
if (reversed)
|
|
Toshihiro Shimizu |
890ddd |
for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = cmap_offset + 1 - ((*bytein >> bit) & 1);
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein++;
|
|
Toshihiro Shimizu |
890ddd |
bit = 7;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
bit--;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
?D 5
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = cmap_offset + ((*bytein >> bit) & 1);
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein++;
|
|
Toshihiro Shimizu |
890ddd |
bit = 7;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
bit--;
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
bytein++;
|
|
Toshihiro Shimizu |
890ddd |
bit = 7;
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 5
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
bit--;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 5
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Toshihiro Shimizu |
890ddd |
?D 84 static void rop_reduce_bw_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 static void rop_copy_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 84 {
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
printf ("rop_reduce_bw_cm16 not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *bytein;
|
|
Toshihiro Shimizu |
890ddd |
ULONG *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *penmap, *colmap;
|
|
Toshihiro Shimizu |
890ddd |
ULONG i_0, i_1, i_t;
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout, bit, bit_offs, startbit;
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
penmap=rout->cmap.penbuffer;
|
|
Toshihiro Shimizu |
890ddd |
colmap=rout->cmap.colbuffer;
|
|
Toshihiro Shimizu |
890ddd |
if (penmap[0].r + colmap[0].r==0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
i_0 = 0;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = 255;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
i_0 = 255;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (rin->type==RAS_WB)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
i_t = i_0;
|
|
Toshihiro Shimizu |
890ddd |
i_0 = i_1;
|
|
Toshihiro Shimizu |
890ddd |
i_1 = i_t;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
wrapin = (rin->wrap + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
bit_offs = rin ->bit_offs;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
|
|
Toshihiro Shimizu |
890ddd |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Toshihiro Shimizu |
890ddd |
rowout = (ULONG*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein = rowin;
|
|
Toshihiro Shimizu |
890ddd |
bit = startbit;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein++;
|
|
Toshihiro Shimizu |
890ddd |
bit = 7;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
bit--;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 89
|
|
Toshihiro Shimizu |
890ddd |
if (rout->extra_mask)
|
|
Toshihiro Shimizu |
890ddd |
rop_copy_extra (rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?E 84 }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 28 static void rop_zoom_out_bw_cm16(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31 int x1,
|
|
Toshihiro Shimizu |
890ddd |
int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
|
|
Toshihiro Shimizu |
890ddd |
?E 31 { printf("rop_zoom_out_bw_cm16 not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 84 static void rop_zoom_out_bw_cm24(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int abs_zoom_level) { printf("rop_zoom_out_bw_cm24 not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
?I 19 static void rop_copy_bw_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy) {
|
|
Toshihiro Shimizu |
890ddd |
UCHAR *rowin, *bytein;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL *rowout, *pixout;
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL rgb_0, rgb_1;
|
|
Toshihiro Shimizu |
890ddd |
int wrapin, wrapout, bit, bit_offs, startbit;
|
|
Toshihiro Shimizu |
890ddd |
int x, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
if (rin->type==RAS_WB)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
rgb_0.r = 0xff; rgb_0.g = 0xff; rgb_0.b = 0xff; rgb_0.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
rgb_1.r = 0x00; rgb_1.g = 0x00; rgb_1.b = 0x00; rgb_1.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
rgb_0.r = 0x00; rgb_0.g = 0x00; rgb_0.b = 0x00; rgb_0.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
rgb_1.r = 0xff; rgb_1.g = 0xff; rgb_1.b = 0xff; rgb_1.m = 0xff;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
lx=x2-x1+1;
|
|
Toshihiro Shimizu |
890ddd |
ly=y2-y1+1;
|
|
Toshihiro Shimizu |
890ddd |
?D 47
|
|
Toshihiro Shimizu |
890ddd |
wrapin = (rin->wrap + 7) / 8;
|
|
Toshihiro Shimizu |
890ddd |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
?I 47
|
|
Toshihiro Shimizu |
890ddd |
wrapin = (rin->wrap + 7) >> 3;
|
|
Toshihiro Shimizu |
890ddd |
?E 47
|
|
Toshihiro Shimizu |
890ddd |
bit_offs = rin ->bit_offs;
|
|
Toshihiro Shimizu |
890ddd |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
rowin = (UCHAR*)rin->buffer + wrapin*y1 + ((x1 + bit_offs)>>3);
|
|
Toshihiro Shimizu |
890ddd |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Toshihiro Shimizu |
890ddd |
rowout = (LPIXEL*)rout->buffer + wrapout*newy + newx;
|
|
Toshihiro Shimizu |
890ddd |
while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein = rowin;
|
|
Toshihiro Shimizu |
890ddd |
bit = startbit;
|
|
Toshihiro Shimizu |
890ddd |
pixout = rowout;
|
|
Toshihiro Shimizu |
890ddd |
for (x = lx; x > 0; x--)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = ((*bytein >> bit) & 1) ? rgb_1 : rgb_0;
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Toshihiro Shimizu |
890ddd |
bytein++;
|
|
Toshihiro Shimizu |
890ddd |
bit = 7;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
else
|
|
Toshihiro Shimizu |
890ddd |
bit--;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
rowin += wrapin;
|
|
Toshihiro Shimizu |
890ddd |
rowout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
} }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Toshihiro Shimizu |
890ddd |
?D 84 static void rop_reduce_bw_rgbm(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2, int newx, int newy, int factor) { printf("rop_reduce_bw_rgbm not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 28 static void rop_zoom_out_bw_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31 int x1,
|
|
Toshihiro Shimizu |
890ddd |
int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 61 printf("rop_zoom_out_bw_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61 UCHAR *rowin, *bytein, *in;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int val_0, val_1, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, bitin, bit, bit_offs, startbit;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
|
|
Shinya Kitaoka |
120a6e |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bitin = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = bytein;
|
|
Shinya Kitaoka |
120a6e |
bit = bitin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += ((*in >> bit) & 1);
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (bit == 0) {
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
bit--;
|
|
Shinya Kitaoka |
120a6e |
tmp += ((*in >> bit) & 1);
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (bit == 0) {
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
bit--;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
bit += factor;
|
|
Shinya Kitaoka |
120a6e |
while (bit > 7) {
|
|
Shinya Kitaoka |
120a6e |
in--;
|
|
Shinya Kitaoka |
120a6e |
bit -= 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
bitin -= factor;
|
|
Shinya Kitaoka |
120a6e |
while (bitin < 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein++;
|
|
Shinya Kitaoka |
120a6e |
bitin += 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_xrest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bitin = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (yrest_fac - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
bitin -= factor;
|
|
Shinya Kitaoka |
120a6e |
while (bitin < 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein++;
|
|
Shinya Kitaoka |
120a6e |
bitin += 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (yrest_xrest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = (tmp + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Shinya Kitaoka |
120a6e |
?E 19 static void rop_copy_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap;
|
|
Shinya Kitaoka |
120a6e |
?D 18 int wrapin, wrapout, tmp, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 18
|
|
Toshihiro Shimizu |
890ddd |
?I 18 int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 18 int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int i, reversed;
|
|
Shinya Kitaoka |
120a6e |
?E 4
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 4
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_gr8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmap = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap_offset = rout->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 reversed = cmap[0].r != 0;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?D 8 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
?I 8
|
|
Shinya Kitaoka |
120a6e |
?D 10 if ((rin->wrap % sizeof(UCHAR)) || (rout->wrap % sizeof(USHORT))) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_gr8_cm16; bad wrap\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap / sizeof(UCHAR);
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap / sizeof(USHORT);
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?E 8
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
if (reversed)
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = cmap_offset + (255 - *bytein++);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = cmap_offset + *bytein++;
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 4
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Toshihiro Shimizu |
890ddd |
?D 84 static void
|
|
Shinya Kitaoka |
120a6e |
rop_reduce_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_gr8_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 printf("rop_reduce_gr8_cm16 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 UCHAR *rowin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int i, reversed;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
penmap = rout->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rout->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
reversed = penmap[0].r + colmap[0].r != 0;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (ULONG *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
if (reversed)
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = 255 - *bytein++;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = *bytein++;
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 28
|
|
Toshihiro Shimizu |
890ddd |
static void rop_zoom_out_gr8_cm16(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy, int abs_zoom_level)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("rop_zoom_out_gr8_cm16 not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
printf("rop_zoom_out_gr8_cm24 not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Shinya Kitaoka |
120a6e |
?I 23 static void rop_copy_cm8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmapin, *cmapout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rin->cmap.buffer || !rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_cm8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmapin = rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmapout = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmapin_offset = rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
cmapout_offset = rout->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmapin_offset = rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmapout_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 cmap_offset_delta = cmapout_offset - cmapin_offset;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = *pixin++ + cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_bw_gr8(
|
|
Shinya Kitaoka |
120a6e |
RASTER *rin,
|
|
Shinya Kitaoka |
120a6e |
RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_cm8_cm24(
|
|
Shinya Kitaoka |
120a6e |
RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 84 int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
?D 84 int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int factor) { printf("rop_reduce_bw_gr8 not implemented yet\n"); }
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 28 static void rop_zoom_out_bw_gr8(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?D 31 int x1, int y1, int x2, int y2, int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
?I 31 int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 31 {
|
|
Shinya Kitaoka |
120a6e |
printf("rop_zoom_out_bw_gr8 not implemented yet\n");
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
static void rop_reduce_gr8(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy, int factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 84 UCHAR *rowin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowout, *byteout;
|
|
Shinya Kitaoka |
120a6e |
int tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 UCHAR *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmapin_offset, cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 84 cmapin_offset = rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset_delta = -cmapin_offset;
|
|
Shinya Kitaoka |
120a6e |
?E 84 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61
|
|
Shinya Kitaoka |
120a6e |
?D 84 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?D 28 xlast = x2 - xrest - (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest - (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 28
|
|
Shinya Kitaoka |
120a6e |
?I 28 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 28 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84 rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (UCHAR *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
?D 28 for (y = y1; y <= ylast; y += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?I 28 for (y = y1; y < ylast; y += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (ULONG *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 28 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
byteout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) tmp += bytein[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = tmp / (factor * factor);
|
|
Shinya Kitaoka |
120a6e |
bytein += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) tmp += bytein[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
*byteout = tmp / (factor * xrest);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) *pixout++ = *pixin++ + cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 84 rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
byteout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) tmp += bytein[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = tmp / (yrest * factor);
|
|
Shinya Kitaoka |
120a6e |
bytein += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) tmp += bytein[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
*byteout = tmp / (yrest * xrest);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 28
|
|
Shinya Kitaoka |
120a6e |
?D 84
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_gr8(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?D 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_bw_gr8(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
?D 84 printf("rop_zoom_out_gr8 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 printf("rop_zoom_out_bw_gr8 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 28
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_gr8(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 printf("rop_reduce_cm16 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 printf("rop_zoom_out_gr8 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 28
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_cm16(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?D 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("rop_zoom_out_cm16 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 28
|
|
Shinya Kitaoka |
120a6e |
?D 84 static void rop_reduce_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm24(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 printf("rop_reduce_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 printf("rop_zoom_out_cm24 not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 28
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_rgbm(RASTER *rin, RASTER *rout,
|
|
Shinya Kitaoka |
120a6e |
?D 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level)
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
{
|
|
Shinya Kitaoka |
120a6e |
?D 31 printf("rop_zoom_out_rgbm not implemented yet\n");
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Shinya Kitaoka |
120a6e |
?I 31 LPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
?D 38 in += factor;
|
|
Shinya Kitaoka |
120a6e |
?E 38
|
|
Shinya Kitaoka |
120a6e |
?I 38 in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 38 in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
?D 38 in -= factor;
|
|
Shinya Kitaoka |
120a6e |
?E 38
|
|
Shinya Kitaoka |
120a6e |
?I 38 in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 38 in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.m = (tmp_m + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 31
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 46 static void rop_zoom_out_rgbx(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 95
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out_rgbx64_rgbx(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_rgbm64_rgbm(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b, tmp_m;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 95
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 95 rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
valout.m = PIX_BYTE_FROM_USHORT((tmp_m + fac_fac_4) >> fac_fac_2_bits);
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.m = PIX_BYTE_FROM_USHORT((tmp_m + fac_xrest_2) / fac_xrest);
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
valout.m = PIX_BYTE_FROM_USHORT((tmp_m + yrest_fac_2) / yrest_fac);
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = tmp_m = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
tmp_m += valin.m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = PIX_BYTE_FROM_USHORT((tmp_r + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.g = PIX_BYTE_FROM_USHORT((tmp_g + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.b = PIX_BYTE_FROM_USHORT((tmp_b + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
valout.m = PIX_BYTE_FROM_USHORT((tmp_m + yrest_xrest_2) / yrest_xrest);
|
|
Shinya Kitaoka |
120a6e |
*pixout = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 95
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 54 static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_bw_rgb16(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
USHORT rgb_0, rgb_1;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, bit, bit_offs, startbit;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
rgb_0 = 0xffff;
|
|
Shinya Kitaoka |
120a6e |
rgb_1 = 0x0000;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
rgb_0 = 0x0000;
|
|
Shinya Kitaoka |
120a6e |
rgb_1 = 0xffff;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
|
|
Shinya Kitaoka |
120a6e |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bit = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = ((*bytein >> bit) & 1) ? rgb_1 : rgb_0;
|
|
Shinya Kitaoka |
120a6e |
if (bit == 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
bit--;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 61 static void rop_zoom_out_bw_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *bytein, *in;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int val_0, val_1, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, bitin, bit, bit_offs, startbit;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
|
|
Shinya Kitaoka |
120a6e |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bitin = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = bytein;
|
|
Shinya Kitaoka |
120a6e |
bit = bitin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += ((*in >> bit) & 1);
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (bit == 0) {
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
bit--;
|
|
Shinya Kitaoka |
120a6e |
tmp += ((*in >> bit) & 1);
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
if (bit == 0) {
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
bit--;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
bit += factor;
|
|
Shinya Kitaoka |
120a6e |
while (bit > 7) {
|
|
Shinya Kitaoka |
120a6e |
in--;
|
|
Shinya Kitaoka |
120a6e |
bit -= 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
bitin -= factor;
|
|
Shinya Kitaoka |
120a6e |
while (bitin < 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein++;
|
|
Shinya Kitaoka |
120a6e |
bitin += 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_xrest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bitin = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (yrest_fac - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
bitin -= factor;
|
|
Shinya Kitaoka |
120a6e |
while (bitin < 0) {
|
|
Shinya Kitaoka |
120a6e |
bytein++;
|
|
Shinya Kitaoka |
120a6e |
bitin += 8;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BIT(i, j, bytein, wrapin, 7 - bitin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (yrest_xrest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 61 static void rop_copy_gr8_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *pixin, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(val, val, val);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(val, val, val);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_gr8_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
?I 52 static void rop_copy_cm16_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = cmap[*pixin++];
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout++ = BYTES_TO_RGB16(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 96 static void rop_copy_cm16_xrgb1555(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = cmap[*pixin++];
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_XRGB1555_FROM_BYTES(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_cm24_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, win;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
?I 89
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 89 while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
win = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, val)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 96 static void rop_copy_cm24_xrgb1555(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, win;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
win = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(win, penmap, colmap, val)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_XRGB1555_FROM_BYTES(val.r, val.g, val.b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rout->extra_mask) rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Shinya Kitaoka |
120a6e |
?E 84 static void rop_zoom_out_cm16_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap, valin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap = rin->cmap.buffer - rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[*in];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = cmap[pixin[i + j * wrapin]];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_zoom_out_cm24_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, *in, win;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap, valin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
win = *in;
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
win = *in;
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
win = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
MAP24_64(win, penmap, colmap, valin)
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84 static void rop_copy_rgbx_rgb16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowin, *pixin, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
?D 70 *pixout++ =
|
|
Shinya Kitaoka |
120a6e |
(val.r << 8) & 0xf800 | (val.g << 3) & 0x7e0 | (val.b >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 70
|
|
Shinya Kitaoka |
120a6e |
?I 70 *pixout++ = PIX_RGB16_FROM_RGBX(val);
|
|
Shinya Kitaoka |
120a6e |
?E 70
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 95
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?I 96
|
|
Toshihiro Shimizu |
890ddd |
#define SWAP_SHORT(N) (((N) >> 8) | ((N) << 8))
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 96
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_rgbx_xrgb1555(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowin, *pixin, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout, outval;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
outval = PIX_XRGB1555_FROM_RGBX(val);
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = SWAP_SHORT(outval);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 96 static void rop_copy_rgbx64_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 95
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 95 rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_RGBX64(val);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 95
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 96 static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_rgbx64_xrgb1555(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin, val;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
val = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_XRGB1555_FROM_RGBX64(val);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Shinya Kitaoka |
120a6e |
?I 70 static void rop_copy_rgb16_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++, *pixin++, *pixout++)
|
|
Shinya Kitaoka |
120a6e |
PIX_RGB16_TO_RGBM(*pixin, *pixout)
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 96 static void rop_copy_xrgb1555_rgbm(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy) {
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++, *pixin++, *pixout++)
|
|
Shinya Kitaoka |
120a6e |
PIX_XRGB1555_TO_RGBM(*pixin, *pixout)
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 96
|
|
Shinya Kitaoka |
120a6e |
?E 70 static void rop_zoom_out_rgbx_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 xrest = lx % factor;
|
|
Shinya Kitaoka |
120a6e |
yrest = ly % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (LPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout++ = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
?D 54 *pixout = BYTES_TO_RGB16(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 54
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 95 static void rop_zoom_out_rgbx64_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
SPIXEL *rowin, *pixin, *in, valin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, xlast, ylast, xrest, yrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, yrest_fac, fac_xrest, yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, yrest_fac_2, fac_xrest_2, yrest_xrest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
xrest = lx & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
yrest = ly & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
xlast = x2 - xrest + 1;
|
|
Shinya Kitaoka |
120a6e |
ylast = y2 - yrest + 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac = yrest * factor;
|
|
Shinya Kitaoka |
120a6e |
yrest_fac_2 = yrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest = factor * xrest;
|
|
Shinya Kitaoka |
120a6e |
fac_xrest_2 = fac_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest = yrest * xrest;
|
|
Shinya Kitaoka |
120a6e |
yrest_xrest_2 = yrest_xrest >> 1;
|
|
Shinya Kitaoka |
120a6e |
/*dafare*/
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (SPIXEL *)rin->buffer + wrapin * y1 + x1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (y = y1; y < ylast; y += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
valin = *in;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_xrest_2) / fac_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (yrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = x1; x < xlast; x += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_fac_2) / yrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (xrest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < yrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < xrest; i++) {
|
|
Shinya Kitaoka |
120a6e |
valin = pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
tmp_r += valin.r;
|
|
Shinya Kitaoka |
120a6e |
tmp_g += valin.g;
|
|
Shinya Kitaoka |
120a6e |
tmp_b += valin.b;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + yrest_xrest_2) / yrest_xrest;
|
|
Shinya Kitaoka |
120a6e |
*pixout = PIX_RGB16_FROM_USHORT(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 95
|
|
Toshihiro Shimizu |
890ddd |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout.
|
|
Shinya Kitaoka |
120a6e |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Shinya Kitaoka |
120a6e |
* al primo pixel del raster.
|
|
Shinya Kitaoka |
120a6e |
*
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_copy(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy) {
|
|
Shinya Kitaoka |
120a6e |
?D 13 char *rowin, *rowout;
|
|
Shinya Kitaoka |
120a6e |
?E 13
|
|
Toshihiro Shimizu |
890ddd |
?I 13
|
|
Toshihiro Shimizu |
890ddd |
?D 41 UCHAR *rowin, *rowout;
|
|
Shinya Kitaoka |
120a6e |
?E 13
|
|
Toshihiro Shimizu |
890ddd |
?D 10 int rowsize, wrapin, wrapout, d, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 int rowsize, bytewrapin, bytewrapout, d, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?D 12 int pixbits_in, pixbits_out;
|
|
Shinya Kitaoka |
120a6e |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?I 12 int pixbits_in, pixbits_out;
|
|
Shinya Kitaoka |
120a6e |
int pixbytes_in, pixbytes_out;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 41 int tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?I 4 int rasras;
|
|
Shinya Kitaoka |
120a6e |
?E 4
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + x2 - x1 >= rout->lx || newy + y2 - y1 >= rout->ly)
|
|
Shinya Kitaoka |
120a6e |
?D 27 {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 27
|
|
Shinya Kitaoka |
120a6e |
?I 27 {
|
|
Shinya Kitaoka |
120a6e |
printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_copy; access violation\n"
|
|
Shinya Kitaoka |
120a6e |
" ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
|
|
Shinya Kitaoka |
120a6e |
x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 27
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 2 if (rin->type == RAS_CM && rout->type == RAS_RGBM)
|
|
Toshihiro Shimizu |
890ddd |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2
|
|
Toshihiro Shimizu |
890ddd |
?D 4 if (rin->type == RAS_CM16 && rout->type == RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
?E 2 {
|
|
Shinya Kitaoka |
120a6e |
?D 2 rop_copy_cm_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2 rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 2 return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 4
|
|
Toshihiro Shimizu |
890ddd |
?D 10 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10
|
|
Toshihiro Shimizu |
890ddd |
?D 23 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_in = rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_out = rop_pixbytes(rout->type);
|
|
Shinya Kitaoka |
120a6e |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?D 4
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 4
|
|
Toshihiro Shimizu |
890ddd |
?I 4
|
|
Shinya Kitaoka |
120a6e |
?D 96 rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras)
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?I 96 if (rin->type == rout->type)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
else ?E 96 {
|
|
Shinya Kitaoka |
120a6e |
?I 73
|
|
Shinya Kitaoka |
120a6e |
?D 96 CASE RASRAS(RAS_RGBM64, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?D 83 __OR RASRAS(RAS_UNICM16, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 83 __OR RASRAS(RAS_CM16S8, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16S4, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_MBW16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 90 __OR RASRAS(RAS_GR16, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 90
|
|
Shinya Kitaoka |
120a6e |
?D 83 __OR RASRAS(RAS_UNICM8, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 83 __OR RASRAS(RAS_CM8, RAS_CM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8S8, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8S4, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 84 __OR RASRAS(RAS_CM24, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 84 rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 73
|
|
Shinya Kitaoka |
120a6e |
?D 18 CASE RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 18
|
|
Shinya Kitaoka |
120a6e |
?I 18 CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 18 rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_CM24, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 58 CASE RASRAS(RAS_CM16, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_CM24, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84 CASE RASRAS(RAS_RGBM, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbm_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 95 CASE RASRAS(RAS_RGB_64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 95
|
|
Shinya Kitaoka |
120a6e |
?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 81
|
|
Toshihiro Shimizu |
890ddd |
?E 58
|
|
Shinya Kitaoka |
120a6e |
?I 18 CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 68 CASE RASRAS(RAS_BW, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?D 69 rop_copy_bw_bw(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
?I 69 rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 69
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 68
|
|
Shinya Kitaoka |
120a6e |
?E 18 CASE RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?I 19
|
|
Toshihiro Shimizu |
890ddd |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_BW, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 84 CASE RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 19
|
|
Toshihiro Shimizu |
890ddd |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 6
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 23
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_GR8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 84 CASE RASRAS(RAS_CM8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?D 41 return;
|
|
Shinya Kitaoka |
120a6e |
?I 39 CASE RASRAS(RAS_CM16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 23 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_in = rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_out = rop_pixbytes(rout->type);
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_CM8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?D 41
|
|
Shinya Kitaoka |
120a6e |
/* pixsize compatibili */
|
|
Shinya Kitaoka |
120a6e |
if (pixbits_in != pixbits_out) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; different pixel size\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* per adesso niente pixel non multipli di 8 bits */
|
|
Shinya Kitaoka |
120a6e |
if (rop_fillerbits(rin->type) || rop_fillerbits(rout->type)) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; fillerbits not allowed\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 41
|
|
Shinya Kitaoka |
120a6e |
?D 52 CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8, RAS_CM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 52
|
|
Shinya Kitaoka |
120a6e |
?D 73 CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8, RAS_CM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 58 __OR RASRAS(RAS_RGBM64, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 58
|
|
Shinya Kitaoka |
120a6e |
?E 52 __OR RASRAS(RAS_MBW16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_UNICM8, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_UNICM16, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 72 __OR RASRAS(RAS_CM8S8, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8S4, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16S8, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16S4, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 72 rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 71 CASE RASRAS(RAS_RGBM, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 71
|
|
Shinya Kitaoka |
120a6e |
?I 71 CASE RASRAS(RAS_RGB_, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 71 __OR RASRAS(RAS_RGBM, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 71 __OR RASRAS(RAS_RGB_, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 71 __OR RASRAS(RAS_RGBM, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 71 __OR RASRAS(RAS_RGB_, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 71 __OR RASRAS(RAS_RGBM, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 72 __OR RASRAS(RAS_RGB_, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 72
|
|
Shinya Kitaoka |
120a6e |
?I 42 __OR RASRAS(RAS_CM16, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 42 __OR RASRAS(RAS_UNICM16, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_UNICM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 71 __OR RASRAS(RAS_RGB_, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 72 __OR RASRAS(RAS_RGB16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 72 __OR RASRAS(RAS_RGB_, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 71
|
|
Shinya Kitaoka |
120a6e |
?D 42 __OR RASRAS(RAS_CM16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 42 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 73
|
|
Shinya Kitaoka |
120a6e |
?I 54 CASE RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Shinya Kitaoka |
120a6e |
?I 52 CASE RASRAS(RAS_CM16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE RASRAS(RAS_CM24, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84 CASE RASRAS(RAS_RGB_, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?I 70
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 95 CASE RASRAS(RAS_RGB_64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 95
|
|
Shinya Kitaoka |
120a6e |
?D 74 CASE RASRAS(RAS_RGB16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 74
|
|
Shinya Kitaoka |
120a6e |
?I 74 CASE RASRAS(RAS_RGB16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 74 rop_copy_rgb16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 70
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 67 CASE RASRAS(RAS_RGB_, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx_rgb(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?I 73
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 83 CASE RASRAS(RAS_RGBM, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
__OR RASRAS(RAS_RGB_, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
__OR RASRAS(RAS_RGB16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
__OR RASRAS(RAS_CM16, RAS_UNICM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
__OR RASRAS(RAS_UNICM16, RAS_UNICM8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_UNICM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 83
|
|
Shinya Kitaoka |
120a6e |
?I 83 CASE RASRAS(RAS_RGBM, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 90 __OR RASRAS(RAS_RGBM64, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 90 __OR RASRAS(RAS_RGBM, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 90 __OR RASRAS(RAS_CM16, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 90 __OR RASRAS(RAS_CM16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 84 __OR RASRAS(RAS_CM24, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?D 89 __OR RASRAS(RAS_CM24, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 83 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 73
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 67
|
|
Toshihiro Shimizu |
890ddd |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?D 41
|
|
Shinya Kitaoka |
120a6e |
/* copia */
|
|
Toshihiro Shimizu |
890ddd |
?D 10 rowsize = (pixbits_in * (x2 - x1 + 1)) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?I 7
|
|
Toshihiro Shimizu |
890ddd |
#ifdef CHE_CAVOLO_VADO_A_SCRIVERE___WALTER
|
|
Toshihiro Shimizu |
890ddd |
?E 7 wrapin = (rin->wrap * pixbits_in) >> 3;
|
|
Shinya Kitaoka |
120a6e |
wrapout = (rout->wrap * pixbits_out) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?D 7
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 7
|
|
Toshihiro Shimizu |
890ddd |
?I 7
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 7 rowin = (char *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout = (char *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10
|
|
Toshihiro Shimizu |
890ddd |
?D 11
|
|
Toshihiro Shimizu |
890ddd |
rowsize = pixbytes_in * (x2-x1+1));
|
|
Toshihiro Shimizu |
890ddd |
?E 11
|
|
Shinya Kitaoka |
120a6e |
?I 11 rowsize = pixbytes_in * (x2 - x1 + 1);
|
|
Toshihiro Shimizu |
890ddd |
?E 11 bytewrapin = rin->wrap * pixbytes_in;
|
|
Shinya Kitaoka |
120a6e |
bytewrapout = rout->wrap * pixbytes_out;
|
|
Toshihiro Shimizu |
890ddd |
?D 12 rowin = (UCHAR *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
|
|
Toshihiro Shimizu |
890ddd |
rowout = (UCHAR *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
|
|
Toshihiro Shimizu |
890ddd |
?E 12
|
|
Shinya Kitaoka |
120a6e |
?I 12 rowin =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
|
|
Toshihiro Shimizu |
890ddd |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?E 10 d = y2 - y1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
while (d-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
memmove(rowout, rowin, rowsize);
|
|
Shinya Kitaoka |
120a6e |
?D 10 rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 rowin += bytewrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += bytewrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 41 DEFAULT :
|
|
Toshihiro Shimizu |
890ddd |
?D 52 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 52 assert(!"rop_copy; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?E 41
|
|
Toshihiro Shimizu |
890ddd |
?I 20
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?D 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout.
|
|
Shinya Kitaoka |
120a6e |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Shinya Kitaoka |
120a6e |
* al primo pixel del raster.
|
|
Shinya Kitaoka |
120a6e |
* Riduce le dimensioni di un certo fattore facendo la media dei valori
|
|
Shinya Kitaoka |
120a6e |
* dei pixel.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_reduce(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int factor) {
|
|
Shinya Kitaoka |
120a6e |
int tmp, newlx, newly;
|
|
Shinya Kitaoka |
120a6e |
int rasras;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
newlx = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_reduce; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?D 28 __OR RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?I 28
|
|
Toshihiro Shimizu |
890ddd |
?D 46 rop_reduce_cm16_rgb_(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46 rop_reduce_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
?E 46 return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 28 rop_reduce_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 81 CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_gr8(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_cm16(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_reduce_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, factor);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 52 printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_reduce; invalid raster combination\n");
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 52 assert(!"rop_reduce; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 28
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 39
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout.
|
|
Shinya Kitaoka |
120a6e |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Shinya Kitaoka |
120a6e |
* al primo pixel del raster.
|
|
Shinya Kitaoka |
120a6e |
* Riduce le dimensioni di un fattore di subsampling pari a shrink.
|
|
Shinya Kitaoka |
120a6e |
* I due raster devono essere dello stesso tipo.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_shrink(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int shrink) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *curr_pixin, *bufferin;
|
|
Shinya Kitaoka |
120a6e |
int i, j, tmp, bpp;
|
|
Shinya Kitaoka |
120a6e |
int xsize, ysize, wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *curr_pixout, *bufferout;
|
|
Shinya Kitaoka |
120a6e |
?I 84 USHORT *curr_pixin_2, *curr_pixout_2;
|
|
Shinya Kitaoka |
120a6e |
ULONG *curr_pixin_4, *curr_pixout_4;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (shrink == 1) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 39
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + (x2 - x1 + shrink) / shrink > rout->lx ||
|
|
Shinya Kitaoka |
120a6e |
newy + (y2 - y1 + shrink) / shrink > rout->ly ||
|
|
Shinya Kitaoka |
120a6e |
rin->type != rout->type) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_shrink; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bpp = rop_pixbytes(rin->type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
xsize = (x2 - x1 + shrink) / shrink;
|
|
Shinya Kitaoka |
120a6e |
ysize = (y2 - y1 + shrink) / shrink;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufferin = (UCHAR *)(rin->buffer) + wrapin * y1 + x1 * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap * bpp;
|
|
Shinya Kitaoka |
120a6e |
bufferout = (UCHAR *)(rout->buffer) + wrapout * newy + newx * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapin *= shrink;
|
|
Shinya Kitaoka |
120a6e |
?D 84 shrink *= bpp;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ysize; i++) {
|
|
Shinya Kitaoka |
120a6e |
curr_pixin = bufferin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout = bufferout;
|
|
Shinya Kitaoka |
120a6e |
bufferin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
bufferout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84 for (j = 0; j < xsize; j++)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 switch (bpp)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 memcpy(curr_pixout, curr_pixin, bpp);
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout += bpp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 39
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout.
|
|
Shinya Kitaoka |
120a6e |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Shinya Kitaoka |
120a6e |
* al primo pixel del raster.
|
|
Shinya Kitaoka |
120a6e |
* Riduce le dimensioni di una potenza di due facendo la media dei valori
|
|
Toshihiro Shimizu |
890ddd |
?D 29
|
|
Shinya Kitaoka |
120a6e |
* dei pixel, ma solo su circa 3/4 dei pixel.
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Toshihiro Shimizu |
890ddd |
?I 29
|
|
Shinya Kitaoka |
120a6e |
* dei pixel, ma solo su una parte dei pixel.
|
|
Toshihiro Shimizu |
890ddd |
?E 29
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
int tmp, newlx, newly;
|
|
Shinya Kitaoka |
120a6e |
int rasras, factor, abszl;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
abszl = abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
newlx = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly)
|
|
Shinya Kitaoka |
120a6e |
?D 30 {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_zoom_out; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 30
|
|
Shinya Kitaoka |
120a6e |
?I 30 {
|
|
Shinya Kitaoka |
120a6e |
printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_zoom_out; access violation\n"
|
|
Shinya Kitaoka |
120a6e |
" ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
|
|
Shinya Kitaoka |
120a6e |
x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 30
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?D 46 rop_zoom_out_cm16_rgb_(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46 rop_zoom_out_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 81 CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 81 CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?D 46 __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 46
|
|
Toshihiro Shimizu |
890ddd |
?I 46 rop_zoom_out_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 46 rop_zoom_out_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?D 57 return;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 54
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 61 CASE RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 61 CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Shinya Kitaoka |
120a6e |
?E 54
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 52 CASE RASRAS(RAS_CM16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 52 DEFAULT :
|
|
Shinya Kitaoka |
120a6e |
?D 52 printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_zoom_out; invalid raster combination\n");
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 52 assert(!"rop_zoom_out; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?E 28
|
|
Toshihiro Shimizu |
890ddd |
?E 20
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
/* TOPPA TEMPORANEA PER INPUT, rifare completamente
|
|
Toshihiro Shimizu |
890ddd |
*
|
|
Toshihiro Shimizu |
890ddd |
* chiedere a Walter
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
/* copia un rettangolo da rin a rout,
|
|
Toshihiro Shimizu |
890ddd |
* specchiandolo orizzontalmente se mirror e' dispari,
|
|
Toshihiro Shimizu |
890ddd |
* e poi ruotandolo del multiplo di novanta gradi specificato
|
|
Toshihiro Shimizu |
890ddd |
* da ninety in senso antiorario
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
*
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
?D 17
|
|
Toshihiro Shimizu |
890ddd |
/* RIVEDERE COMPLETAMENTE, PER ADESSO FUNZIA SOLO PER BW->BW e GR8->GR8 */
|
|
Toshihiro Shimizu |
890ddd |
?E 17
|
|
Toshihiro Shimizu |
890ddd |
?I 17
|
|
Toshihiro Shimizu |
890ddd |
?D 23
|
|
Toshihiro Shimizu |
890ddd |
/* RIVEDERE COMPLETAMENTE, PER ADESSO FUNZIA SOLO PER POCHI TIPI DI RASTER */
|
|
Toshihiro Shimizu |
890ddd |
?E 17
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
void rop_copy_90(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2, int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
int ninety, int flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
?D 15
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 15
|
|
Toshihiro Shimizu |
890ddd |
?I 15
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 15
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 13 char *rowin, *rowout;
|
|
Shinya Kitaoka |
120a6e |
?E 13
|
|
Toshihiro Shimizu |
890ddd |
?I 13
|
|
Toshihiro Shimizu |
890ddd |
?D 23 UCHAR *rowin, *rowout;
|
|
Shinya Kitaoka |
120a6e |
?E 13
|
|
Toshihiro Shimizu |
890ddd |
?D 10 int rowsize, wrapin, wrapout, d, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10
|
|
Toshihiro Shimizu |
890ddd |
?D 14 int rowsize, bytewrapin, bytewrapout, d, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 int rowsize, bytewrapin, bytewrapout, d, tmp, newdx, newdy;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?D 12 int pixbits_in, pixbits_out;
|
|
Shinya Kitaoka |
120a6e |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?I 12 int pixbits_in, pixbits_out;
|
|
Shinya Kitaoka |
120a6e |
int pixbytes_in, pixbytes_out;
|
|
Shinya Kitaoka |
120a6e |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?I 23 int newdx, newdy, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?E 12 int rasras;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 14 if (ninety != 1 || flip != 1) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_90; ?????????????????\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
?I 18
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 18
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 14 switch (ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE 0 : __OR 2 : newdx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
newdy = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
CASE 1 : __OR 3 : newdx = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
newdy = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?I 50
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
newdx = newdy = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
newdx = newdy = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
/* controllo gli sconfinamenti */
|
|
Toshihiro Shimizu |
890ddd |
if(x1<0 || y1<0 || x2>=rin->lx || y2>=rin->ly
|
|
Toshihiro Shimizu |
890ddd |
|| newx<0 || newy<0 ||
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
newx+x2-x1>=rout->lx || newy+y2-y1>=rout->ly)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
newx+newdx>rout->lx || newy+newdy>rout->ly)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_90; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 12 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Toshihiro Shimizu |
890ddd |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?I 12
|
|
Toshihiro Shimizu |
890ddd |
?D 23 pixbits_in = rop_pixbits(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_in = rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
pixbits_out = rop_pixbits(rout->type);
|
|
Shinya Kitaoka |
120a6e |
pixbytes_out = rop_pixbytes(rout->type);
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Shinya Kitaoka |
120a6e |
?E 12 rasras = RASRAS(rin->type, rout->type);
|
|
Toshihiro Shimizu |
890ddd |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, ninety, flip);
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
?E 14 return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 17 CASE RASRAS(RAS_WB, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 21 CASE RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 55 CASE RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 22 CASE RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 22
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Shinya Kitaoka |
120a6e |
?E 17 CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, ninety, flip);
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
?E 14 return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 21 CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 55 CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 22 CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 23 CASE RASRAS(RAS_CM8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 26 CASE RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 63 CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Shinya Kitaoka |
120a6e |
?I 45 CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 45
|
|
Toshihiro Shimizu |
890ddd |
?I 43
|
|
Shinya Kitaoka |
120a6e |
?D 64 CASE RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 64
|
|
Shinya Kitaoka |
120a6e |
?I 64 __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 64 rop_copy_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 43
|
|
Toshihiro Shimizu |
890ddd |
?E 26
|
|
Toshihiro Shimizu |
890ddd |
?E 23
|
|
Toshihiro Shimizu |
890ddd |
?E 22
|
|
Toshihiro Shimizu |
890ddd |
?E 21 DEFAULT :
|
|
Toshihiro Shimizu |
890ddd |
?D 45 printf("### INTERNAL ERROR - rop_copy_90; ?????????????????\n");
|
|
Shinya Kitaoka |
120a6e |
?E 45
|
|
Toshihiro Shimizu |
890ddd |
?I 45
|
|
Toshihiro Shimizu |
890ddd |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 45
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 6
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 6
|
|
Toshihiro Shimizu |
890ddd |
?D 21
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* QUI NON CI SI ARRIVA */
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 6
|
|
Toshihiro Shimizu |
890ddd |
?E 4
|
|
Shinya Kitaoka |
120a6e |
/* pixsize compatibili */
|
|
Shinya Kitaoka |
120a6e |
if (pixbits_in != pixbits_out) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; different pixel size\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* per adesso niente pixel non multipli di 8 bits */
|
|
Shinya Kitaoka |
120a6e |
?D 2 if (pixbits_in & 7) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; byte fraction pixels\n");
|
|
Shinya Kitaoka |
120a6e |
?E 2
|
|
Shinya Kitaoka |
120a6e |
?I 2 if (rop_fillerbits(rin->type) || rop_fillerbits(rout->type)) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy; fillerbits not allowed\n");
|
|
Shinya Kitaoka |
120a6e |
?E 2 return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 4
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 4
|
|
Toshihiro Shimizu |
890ddd |
?I 4
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 4
|
|
Shinya Kitaoka |
120a6e |
/* copia */
|
|
Shinya Kitaoka |
120a6e |
rowsize = (pixbits_in * (x2 - x1 + 1)) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?D 10 wrapin = (rin->wrap * pixbits_in) >> 3;
|
|
Shinya Kitaoka |
120a6e |
wrapout = (rout->wrap * pixbits_out) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 bytewrapin = rin->wrap * pixbytes_in;
|
|
Shinya Kitaoka |
120a6e |
bytewrapout = rout->wrap * pixbytes_out;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 10 rowin = (char *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout = (char *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10
|
|
Toshihiro Shimizu |
890ddd |
?D 12 rowin = (UCHAR *)rin->buffer + y1 * wrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout = (UCHAR *)rout->buffer + newy * wrapout + ((newx * pixbits_out) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 12
|
|
Shinya Kitaoka |
120a6e |
?I 12 rowin =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)rin->buffer + y1 * bytewrapin + ((x1 * pixbits_in) >> 3);
|
|
Shinya Kitaoka |
120a6e |
rowout =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)rout->buffer + newy * bytewrapout + ((newx * pixbits_out) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 12
|
|
Toshihiro Shimizu |
890ddd |
?E 10 d = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
while (d-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
memmove(rowout, rowin, rowsize);
|
|
Shinya Kitaoka |
120a6e |
?D 10 rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
?I 10 rowin += bytewrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += bytewrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 21
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 15
|
|
Toshihiro Shimizu |
890ddd |
#ifdef VERSIONE_LENTA
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 15
|
|
Toshihiro Shimizu |
890ddd |
?I 6
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_bw(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
int ninety, int flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
#ifdef WALTER
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
UCHAR *rowin,
|
|
Shinya Kitaoka |
120a6e |
*bytein;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, tmp, cmap_offset, bit, bit_offs, startbit;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT(BYTE, BIT, VAL) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
if (VAL) \
|
|
Shinya Kitaoka |
120a6e |
*BYTE |= (1 << (BIT)); \
|
|
Shinya Kitaoka |
120a6e |
else \
|
|
Shinya Kitaoka |
120a6e |
*BYTE &= ~(1 << (BIT)); \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 UCHAR *bufin, *bufout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 61
|
|
Shinya Kitaoka |
120a6e |
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) & 1)
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &= \
|
|
Shinya Kitaoka |
120a6e |
~(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |= \
|
|
Shinya Kitaoka |
120a6e |
(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw")
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 CASE 1 : for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout = *curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CASE 2 : curr_pixin_2 = (USHORT *)curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_2 = (USHORT *)curr_pixout;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout_2 = *curr_pixin_2;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin_2 += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_2++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CASE 4 : curr_pixin_4 = (ULONG *)curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_4 = (ULONG *)curr_pixout;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout_4 = *curr_pixin_4;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 curr_pixin_4 += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_4++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
memcpy(curr_pixout, curr_pixin, bpp);
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink * bpp;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout += bpp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/* copia un rettangolo da rin a rout.
|
|
Toshihiro Shimizu |
890ddd |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Toshihiro Shimizu |
890ddd |
* al primo pixel del raster.
|
|
Toshihiro Shimizu |
890ddd |
* Riduce le dimensioni di una potenza di due facendo la media dei valori
|
|
Toshihiro Shimizu |
890ddd |
* dei pixel, ma solo su una parte dei pixel.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_zoom_out(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
int tmp, newlx, newly;
|
|
Shinya Kitaoka |
120a6e |
int rasras, factor, abszl;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
abszl = abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
newlx = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
?I 89 __OR RASRAS(RAS_CM24, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
assert(!"rop_copy; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
?I 96 rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_same(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGB_64)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_RGBM64)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbm_rgbm64(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 104 CASE RASRAS(RAS_BW, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
?E 104
|
|
Shinya Kitaoka |
120a6e |
?I 104 CASE RASRAS(RAS_BW, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 104 __OR RASRAS(RAS_WB, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE RASRAS(RAS_CM16, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm16_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_cm24_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE RASRAS(RAS_RGB_, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE RASRAS(RAS_RGB_, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE RASRAS(RAS_RGB_64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE RASRAS(RAS_RGB_64, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_XRGB1555)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx64_xrgb1555(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE RASRAS(RAS_RGB16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgb16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 97 CASE RASRAS(RAS_XRGB1555, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_XRGB1555, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_xrgb1555_rgbm(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 97 CASE RASRAS(RAS_RGB_, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_rgbx_rgb(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 98 __OR RASRAS(RAS_RGBM, RAS_CM16S12)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 98 __OR RASRAS(RAS_RGBM, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM64, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 98 __OR RASRAS(RAS_CM16, RAS_CM16S12)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 98 __OR RASRAS(RAS_CM16, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 98 __OR RASRAS(RAS_CM24, RAS_CM16S12)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 98 __OR RASRAS(RAS_CM24, RAS_CM16S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_CM16S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_MBW16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 103 __OR RASRAS(RAS_CM24, RAS_GR16)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 103 __OR RASRAS(RAS_CM24, RAS_CM8S8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_CM8S4)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM24, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 97 __OR RASRAS(RAS_CM8S8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM8S8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?I 101 __OR RASRAS(RAS_CM16S12, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_CM16S12, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Shinya Kitaoka |
120a6e |
?E 101 __OR RASRAS(RAS_RLEBW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RLEBW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
:
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 97 rop_copy_quantize(rasras, rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
assert(!"rop_copy; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 96
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
if (rout->extra_mask)
|
|
Shinya Kitaoka |
120a6e |
if (!(rin->type == RAS_CM24 || rout->type == RAS_CM24))
|
|
Shinya Kitaoka |
120a6e |
rop_copy_extra(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
/* else e' gia' stato fatto dalle copy particolari */
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
/* copia un rettangolo da rin a rout.
|
|
Toshihiro Shimizu |
890ddd |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Toshihiro Shimizu |
890ddd |
* al primo pixel del raster.
|
|
Toshihiro Shimizu |
890ddd |
* Riduce le dimensioni di un fattore di subsampling pari a shrink.
|
|
Toshihiro Shimizu |
890ddd |
* I due raster devono essere dello stesso tipo.
|
|
Toshihiro Shimizu |
890ddd |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 94 void rop_shrink(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int shrink) {
|
|
Shinya Kitaoka |
120a6e |
?E 94
|
|
Shinya Kitaoka |
120a6e |
?I 94 void rop_shrink(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy, int shrink) {
|
|
Shinya Kitaoka |
120a6e |
?E 94 UCHAR *curr_pixin, *bufferin;
|
|
Shinya Kitaoka |
120a6e |
int i, j, tmp, bpp;
|
|
Shinya Kitaoka |
120a6e |
int xsize, ysize, wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *curr_pixout, *bufferout;
|
|
Shinya Kitaoka |
120a6e |
USHORT *curr_pixin_2, *curr_pixout_2;
|
|
Shinya Kitaoka |
120a6e |
ULONG *curr_pixin_4, *curr_pixout_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (shrink == 1) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + (x2 - x1 + shrink) / shrink > rout->lx ||
|
|
Shinya Kitaoka |
120a6e |
newy + (y2 - y1 + shrink) / shrink > rout->ly ||
|
|
Shinya Kitaoka |
120a6e |
rin->type != rout->type) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_shrink; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bpp = rop_pixbytes(rin->type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
xsize = (x2 - x1 + shrink) / shrink;
|
|
Shinya Kitaoka |
120a6e |
ysize = (y2 - y1 + shrink) / shrink;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufferin = (UCHAR *)(rin->buffer) + wrapin * y1 + x1 * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap * bpp;
|
|
Shinya Kitaoka |
120a6e |
bufferout = (UCHAR *)(rout->buffer) + wrapout * newy + newx * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrapin *= shrink;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ysize; i++) {
|
|
Shinya Kitaoka |
120a6e |
curr_pixin = bufferin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout = bufferout;
|
|
Shinya Kitaoka |
120a6e |
bufferin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
bufferout += wrapout;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
switch (bpp) {
|
|
Shinya Kitaoka |
120a6e |
CASE 1 : for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout = *curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CASE 2 : curr_pixin_2 = (USHORT *)curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_2 = (USHORT *)curr_pixout;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout_2 = *curr_pixin_2;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin_2 += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_2++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
CASE 4 : curr_pixin_4 = (ULONG *)curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_4 = (ULONG *)curr_pixout;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout_4 = *curr_pixin_4;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin_4 += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout_4++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
memcpy(curr_pixout, curr_pixin, bpp);
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink * bpp;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout += bpp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->extra_mask && rout->extra_mask &&
|
|
Shinya Kitaoka |
120a6e |
!(rin->type == RAS_CM24 || rout->type == RAS_CM24)) {
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * shrink;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufferin = rin->extra + x1 + y1 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
bufferout = rout->extra + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ysize; i++) {
|
|
Shinya Kitaoka |
120a6e |
curr_pixin = bufferin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout = bufferout;
|
|
Shinya Kitaoka |
120a6e |
bufferin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
bufferout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < xsize; j++) {
|
|
Shinya Kitaoka |
120a6e |
*curr_pixout = *curr_pixin;
|
|
Shinya Kitaoka |
120a6e |
curr_pixin += shrink;
|
|
Shinya Kitaoka |
120a6e |
curr_pixout++;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout.
|
|
Shinya Kitaoka |
120a6e |
* Le coordinate sono relative ai due raster: (0, 0) corrisponde
|
|
Shinya Kitaoka |
120a6e |
* al primo pixel del raster.
|
|
Shinya Kitaoka |
120a6e |
* Riduce le dimensioni di una potenza di due facendo la media dei valori
|
|
Shinya Kitaoka |
120a6e |
* dei pixel, ma solo su una parte dei pixel.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_zoom_out(RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int abs_zoom_level) {
|
|
Shinya Kitaoka |
120a6e |
int tmp, newlx, newly;
|
|
Shinya Kitaoka |
120a6e |
int rasras, factor, abszl;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (rout->extra_mask) assert(0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
abszl = abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
if (factor == 1) rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
newlx = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
?E 89 if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_zoom_out; access violation\n"
|
|
Shinya Kitaoka |
120a6e |
" ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
|
|
Shinya Kitaoka |
120a6e |
x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm24_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm24_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm24(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbx(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM16, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm16_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM24, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_cm24_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbx_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 95 CASE RASRAS(RAS_RGBM64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbx64_rgbx(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB_64, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbx64_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGBM64, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_rgbm64_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 95 DEFAULT : assert(!"rop_zoom_out; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* copia un rettangolo da rin a rout,
|
|
Shinya Kitaoka |
120a6e |
* specchiandolo orizzontalmente se mirror e' dispari,
|
|
Shinya Kitaoka |
120a6e |
* e poi ruotandolo del multiplo di novanta gradi specificato
|
|
Shinya Kitaoka |
120a6e |
* da ninety in senso antiorario
|
|
Shinya Kitaoka |
120a6e |
*
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_copy_90(RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
int newdx, newdy, tmp;
|
|
Shinya Kitaoka |
120a6e |
int rasras;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rout->extra_mask) assert(0);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 89 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
switch (ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE 0 : __OR 2 : newdx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
newdy = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
CASE 1 : __OR 3 : newdx = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
newdy = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
newdx = newdy = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + newdx > rout->lx || newy + newdy > rout->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_copy_90; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_WB)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_BW)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_GR8)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM8, RAS_CM16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_cm8_cm16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_CM8, RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_cm8_cm24(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB_, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGBM, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_copy_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy, mirror,
|
|
Shinya Kitaoka |
120a6e |
ninety);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef VERSIONE_LENTA
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_bw(RASTER * rin, RASTER * rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy, int mirror,
|
|
Shinya Kitaoka |
120a6e |
int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bufout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw")
|
|
Shinya Kitaoka |
120a6e |
?E 84 STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 14 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 14 if (!ninety && !flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 if (!ninety && !mirror)
|
|
Shinya Kitaoka |
120a6e |
?E 14 {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 14 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?D 10 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Shinya Kitaoka |
120a6e |
?I 10 wrapin = rin->wrap / 8;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Shinya Kitaoka |
120a6e |
?I 14 u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?E 10
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 14 rowin = (UCHAR *)rin->buffer + wrapin * y1 + ((x1 + bit_offs) >> 3);
|
|
Shinya Kitaoka |
120a6e |
startbit = 7 - ((x1 + bit_offs) & 7);
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 if (ninety & 1)
|
|
Shinya Kitaoka |
120a6e |
?E 14 {
|
|
Shinya Kitaoka |
120a6e |
?D 14 bytein = rowin;
|
|
Shinya Kitaoka |
120a6e |
bit = startbit;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = lx; x > 0; x--) {
|
|
Shinya Kitaoka |
120a6e |
outbyte = outx
|
|
Toshihiro Shimizu |
890ddd |
SET_BIT (rout->buffer
|
|
Toshihiro Shimizu |
890ddd |
*pixout++ = ((*bytein >> bit) & 1) ? i_1 : i_0;
|
|
Toshihiro Shimizu |
890ddd |
if (bit==0)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
lx = lv;
|
|
Toshihiro Shimizu |
890ddd |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 16 bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = rin->wrap / 8;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 16
|
|
Shinya Kitaoka |
120a6e |
?I 16 bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapin = (rin->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47 bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 16 bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 16 bytewrapout = rout->wrap / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 16
|
|
Toshihiro Shimizu |
890ddd |
?I 16
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapout = (rout->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapout = (rout->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?E 16 bitoffsout = rout->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++)
|
|
Shinya Kitaoka |
120a6e |
for (u = u0, v = v0, x = newx; x < newx + lx; u += dudx, x++)
|
|
Shinya Kitaoka |
120a6e |
?E 14 {
|
|
Shinya Kitaoka |
120a6e |
?D 14 bytein++;
|
|
Shinya Kitaoka |
120a6e |
bit = 7;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_1(x, y, bufout, bytewrapout, bitoffsout);
|
|
Shinya Kitaoka |
120a6e |
else SET_BIT_0(x, y, bufout, bytewrapout, bitoffsout);
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 14 else bit--;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Shinya Kitaoka |
120a6e |
?I 14 else for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, y++) for (u = u0, v = v0, x = newx; x < newx + lx;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_1(x, y, bufout, bytewrapout, bitoffsout);
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_0(x, y, bufout, bytewrapout, bitoffsout);
|
|
Shinya Kitaoka |
120a6e |
?I 82
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?D 82
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 15
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_bw(RASTER *rin, RASTER *rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bufout;
|
|
Shinya Kitaoka |
120a6e |
UCHAR tmpbyte;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bytewrapout, bitoffsin, bitoffsout, wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 83 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw")
|
|
Shinya Kitaoka |
120a6e |
STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
?E 83
|
|
Toshihiro Shimizu |
890ddd |
?D 83 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 61
|
|
Shinya Kitaoka |
120a6e |
#define BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(((UCHAR *)(BUF))[(((X) + (BITOFFS)) >> 3) + (Y) * (BYTEWRAP)])
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define GET_BIT(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
((BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) >> (7 - (((X) + (BITOFFS)) & 7))) & \
|
|
Shinya Kitaoka |
120a6e |
(UCHAR)1)
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_0(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) &= \
|
|
Shinya Kitaoka |
120a6e |
~(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SET_BIT_1(X, Y, BUF, BYTEWRAP, BITOFFS) \
|
|
Shinya Kitaoka |
120a6e |
(BUFBYTE(X, Y, BUF, BYTEWRAP, BITOFFS) |= \
|
|
Shinya Kitaoka |
120a6e |
(1 << (7 - (((X) + (BITOFFS)) & 7))))
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define BITCPY(XO, YO, BUFO, BYTEWRAPO, BITOFFSO, XI, YI, BUFI, BYTEWRAPI, \
|
|
Shinya Kitaoka |
120a6e |
BITOFFSI) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(XI, YI, BUFI, BYTEWRAPI, BITOFFSI)) \
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_1(XO, YO, BUFO, BYTEWRAPO, BITOFFSO); \
|
|
Shinya Kitaoka |
120a6e |
else \
|
|
Shinya Kitaoka |
120a6e |
SET_BIT_0(XO, YO, BUFO, BYTEWRAPO, BITOFFSO); \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw") STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
?E 83 u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?I 50
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 16 bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = rin->wrap / 8;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 16
|
|
Shinya Kitaoka |
120a6e |
?I 16 bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapin = (rin->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47 bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 16 bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 16 bytewrapout = rout->wrap / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 16
|
|
Toshihiro Shimizu |
890ddd |
?I 16
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapout = (rout->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapout = (rout->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?E 16 bitoffsout = rout->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
x = newx;
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx && ((x + bitoffsout) & 7); u += dudx, x++)
|
|
Shinya Kitaoka |
120a6e |
BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
|
|
Shinya Kitaoka |
120a6e |
bitoffsin)
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx - 7; x += 8) {
|
|
Shinya Kitaoka |
120a6e |
tmpbyte = GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 7;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 6;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 5;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 4;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 3;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 2;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 1;
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin);
|
|
Shinya Kitaoka |
120a6e |
u += dudx;
|
|
Shinya Kitaoka |
120a6e |
BUFBYTE(x, y, bufout, bytewrapout, bitoffsout) = tmpbyte;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx; u += dudx, x++)
|
|
Shinya Kitaoka |
120a6e |
BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
|
|
Shinya Kitaoka |
120a6e |
bitoffsin)
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
x = newx;
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx && ((x + bitoffsout) & 7); v += dvdx, x++)
|
|
Shinya Kitaoka |
120a6e |
BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
|
|
Shinya Kitaoka |
120a6e |
bitoffsin)
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx - 7; x += 8) {
|
|
Shinya Kitaoka |
120a6e |
tmpbyte = GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 7;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 6;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 5;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 4;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 3;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 2;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin) << 1;
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
tmpbyte |= GET_BIT(u, v, bufin, bytewrapin, bitoffsin);
|
|
Shinya Kitaoka |
120a6e |
v += dvdx;
|
|
Shinya Kitaoka |
120a6e |
BUFBYTE(x, y, bufout, bytewrapout, bitoffsout) = tmpbyte;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
for (; x < newx + lx; v += dvdx, x++)
|
|
Shinya Kitaoka |
120a6e |
BITCPY(x, y, bufout, bytewrapout, bitoffsout, u, v, bufin, bytewrapin,
|
|
Shinya Kitaoka |
120a6e |
bitoffsin)
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 15
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
#ifdef VERSIONE_LENTA
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_90_gr8(RASTER *rin, RASTER *rout, int x1, int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
int newx, int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bufout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudx, dudy, dvdx, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_gr8")
|
|
Shinya Kitaoka |
120a6e |
STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
#else
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 14 if (!ninety && !flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14 if (!ninety && !mirror)
|
|
Shinya Kitaoka |
120a6e |
?E 14 {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 14 u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++)
|
|
Shinya Kitaoka |
120a6e |
for (u = u0, v = v0, x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
bufout[x + y * wrapout] = bufin[u + v * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++)
|
|
Shinya Kitaoka |
120a6e |
for (u = u0, v = v0, x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
bufout[x + y * wrapout] = bufin[u + v * wrapin];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0)
|
|
Shinya Kitaoka |
120a6e |
STW_PRINT(stdout)
|
|
Shinya Kitaoka |
120a6e |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_gr8(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
?D 14
|
|
Toshihiro Shimizu |
890ddd |
int ninety, int flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
?I 14
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 14 if (!ninety && !flip)
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Shinya Kitaoka |
120a6e |
?I 14 UCHAR *bufin, *bufout, *bytein, *byteout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_gr8")
|
|
Shinya Kitaoka |
120a6e |
STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror)
|
|
Shinya Kitaoka |
120a6e |
?E 14 {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 14
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 61 CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
byteout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 17
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 21 static void rop_copy_90_gr8_cm16(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int reversed;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (!rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_90_gr8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
cmap = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap_offset = rout->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 reversed = cmap[0].r != 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
if (reversed)
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = cmap_offset + (255 - *bytein);
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = cmap_offset + *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 23
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_cm8_cm16(RASTER * rin, RASTER * rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy, int mirror,
|
|
Shinya Kitaoka |
120a6e |
int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmapin, *cmapout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (!rin->cmap.buffer || !rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_90_cm8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
cmapin = rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmapout = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmapin_offset = rin->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
cmapout_offset = rout->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmapin_offset = rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmapout_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 cmap_offset_delta = cmapout_offset - cmapin_offset;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *pixin + cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
pixin += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 23
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 22
|
|
Shinya Kitaoka |
120a6e |
?D 55 static void rop_copy_90_gr8_rgbm(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55 static void
|
|
Shinya Kitaoka |
120a6e |
rop_copy_90_gr8_rgb16(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy, int mirror, int ninety)
|
|
Shinya Kitaoka |
120a6e |
?E 55 {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
?D 55 LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55 USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
?E 55 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Toshihiro Shimizu |
890ddd |
?I 61 CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
byteout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
?D 62
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 62
|
|
Toshihiro Shimizu |
890ddd |
?I 62
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 62
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_gr8_cm16(RASTER *rin, RASTER *rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy, int mirror,
|
|
Shinya Kitaoka |
120a6e |
int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int reversed;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_90_gr8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmap = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
reversed = cmap[0].r != 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
if (reversed)
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = cmap_offset + (255 - *bytein);
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = cmap_offset + *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_gr8_cm24(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
ULONG *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int reversed;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
penmap = rout->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rout->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
reversed = penmap[0].r + colmap[0].r != 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
if (reversed)
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = 255 - *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *bytein;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84 static void rop_copy_90_cm8_cm16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
?D 84 LPIXEL *cmapin, *cmapout;
|
|
Shinya Kitaoka |
120a6e |
?E 84 int wrapin, wrapout, cmapin_offset, cmapout_offset, cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rin->cmap.buffer || !rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_90_cm8_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
cmapin = rin->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
cmapout = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmapin_offset = rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmapout_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset_delta = cmapout_offset - cmapin_offset;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *pixin + cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
pixin += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_cm8_cm24(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
ULONG *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout, cmapin_offset, cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
cmapin_offset = rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
cmap_offset_delta = -cmapin_offset;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *pixin + cmap_offset_delta;
|
|
Shinya Kitaoka |
120a6e |
pixin += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 84 static void rop_copy_90_gr8_rgb16(RASTER *rin, RASTER *rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 61 bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
?D 55 tmp.r = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *bytein;
|
|
Shinya Kitaoka |
120a6e |
?I 43 tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Toshihiro Shimizu |
890ddd |
?E 55 bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Toshihiro Shimizu |
890ddd |
?D 56
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DAFARE
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
static void rop_zoom_out_90_gr8_rgb16(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int abs_zoom_level,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 55 UCHAR *bufin, *bytein, *appo;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Toshihiro Shimizu |
890ddd |
?D 56 UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
?E 55 LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56 UCHAR *bufin, *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
int tmp;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
?E 56 int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
?D 57 int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
?E 57 int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57 int ulast, vlast, urest, vrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq;
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq, dindp, dindq;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 57 int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?D 57 int fac_fac, vrest_fac, fac_urest, vrest_urest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, vrest_fac_2, fac_urest_2, vrest_urest_2;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
?E 57 int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 44 printf("mirror = %d ninety = %d\n", mirror, ninety);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 44 if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
?D 56 rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57 rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?E 56 return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 57 su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
?E 57 lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
?D 57 lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
?D 57 lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 56 factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 57 urest = lu % factor;
|
|
Shinya Kitaoka |
120a6e |
vrest = lv % factor;
|
|
Shinya Kitaoka |
120a6e |
ulast = u2 - urest + 1;
|
|
Shinya Kitaoka |
120a6e |
vlast = v2 - vrest + 1;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57
|
|
Shinya Kitaoka |
120a6e |
?D 61 prest = lp % factor;
|
|
Shinya Kitaoka |
120a6e |
qrest = lq % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
?E 57 fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
?D 57 vrest_fac = vrest * factor;
|
|
Shinya Kitaoka |
120a6e |
vrest_fac_2 = vrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_urest = factor * urest;
|
|
Shinya Kitaoka |
120a6e |
fac_urest_2 = fac_urest >> 1;
|
|
Shinya Kitaoka |
120a6e |
vrest_urest = vrest * urest;
|
|
Shinya Kitaoka |
120a6e |
vrest_urest_2 = vrest_urest >> 1;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 56 bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 55 wrapin = rin->wrap * 3; /* mi muovo di bytes */
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 55 bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 57 dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 57 switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
?D 55 CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Shinya Kitaoka |
120a6e |
?D 57 CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
?E 55 CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 55 CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
?E 55 CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 55 CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
?E 55 CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 55 CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
?E 55 CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
?D 55 bytein = bufin + u0 * 3 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 55 pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
?D 55 appo = bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.r = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *appo;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Shinya Kitaoka |
120a6e |
?D 56 tmp.r = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *bytein;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?E 43 tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 *pixout++ = ROP_RGB16_FROM_BYTES(*bytein, *bytein, *bytein);
|
|
Shinya Kitaoka |
120a6e |
?E 56 bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?D 61 CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?E 61 CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?D 61 CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?E 61 DEFAULT :
|
|
Toshihiro Shimizu |
890ddd |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 57 dindp = dudp + wrapin * dvdp;
|
|
Shinya Kitaoka |
120a6e |
dindq = dudq + wrapin * dvdq;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?D 56
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 22
|
|
Toshihiro Shimizu |
890ddd |
?E 21
|
|
Toshihiro Shimizu |
890ddd |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_rgb_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
?D 55 UCHAR *bufin, *bufout, *bytein, *byteout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int value_for_0, value_for_1;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55 UCHAR *bufin, *bytein, *appo;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
?E 55 int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 55 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
?D 55 ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
?I 55 ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 56 u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * 3; /* mi muovo di bytes */
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety)
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57 rowin = (UCHAR *)rin->buffer + wrapin * v1 + u1;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + wrapout * newy + newx;
|
|
Shinya Kitaoka |
120a6e |
for (v = v1; v < vlast; v += factor)
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 rowin = (UCHAR *)rin->buffer + startu + startv * wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?E 56 {
|
|
Shinya Kitaoka |
120a6e |
?D 56 CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
?D 57 for (u = u1; u < ulast; u += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57
|
|
Toshihiro Shimizu |
890ddd |
?D 58 for (p = 0; p < plast; p += factor)
|
|
Shinya Kitaoka |
120a6e |
?E 57 {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
?D 57 in += wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
?E 57 tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
?D 57 in -= wrapin;
|
|
Shinya Kitaoka |
120a6e |
in++;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 in += 2 * wrapin - factor;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?D 57 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 if (urest)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 if (prest)
|
|
Shinya Kitaoka |
120a6e |
?E 57 {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
?D 57 for (i = 0; i < urest; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 for (i = 0; i < prest; i++)
|
|
Shinya Kitaoka |
120a6e |
?E 57 {
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp = (tmp + fac_urest_2) / fac_urest;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 tmp = (tmp + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
?E 57 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 rowin += wrapin * factor;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
?E 57 rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 56
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++)
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57 if (vrest)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 if (qrest)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?E 56 {
|
|
Shinya Kitaoka |
120a6e |
?D 56 bytein = bufin + u0 * 3 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++)
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56 pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
?D 57 for (u = u1; u < ulast; u += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 for (p = 0; p < plast; p += factor)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?E 56 {
|
|
Shinya Kitaoka |
120a6e |
?D 56 appo = bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.r = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *appo;
|
|
Shinya Kitaoka |
120a6e |
tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56 tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 57 for (j = 0; j < vrest; j++)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
?E 57 for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp = (tmp + vrest_fac_2) / vrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 tmp = (tmp + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?E 57 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?D 57 pixin += factor;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 if (urest)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 if (prest)
|
|
Shinya Kitaoka |
120a6e |
?E 57 {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 57 for (j = 0; j < vrest; j++) for (i = 0; i < urest; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 for (j = 0; j < qrest; j++) for (i = 0; i < prest; i++)
|
|
Shinya Kitaoka |
120a6e |
?E 57 {
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp += pixin[i + j * wrapin];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?I 57 tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 57 tmp = (tmp + vrest_urest_2) / vrest_urest;
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
?I 57 tmp = (tmp + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
?E 57 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 56
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
?D 56
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 56
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_bw_gr8(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
?E 56
|
|
Toshihiro Shimizu |
890ddd |
?I 56
|
|
Toshihiro Shimizu |
890ddd |
?D 57
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 57
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 58
|
|
Shinya Kitaoka |
120a6e |
?I 58 for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60 pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 59 if (qrest)
|
|
Toshihiro Shimizu |
890ddd |
?E 59
|
|
Toshihiro Shimizu |
890ddd |
?I 59 if (qrest)
|
|
Shinya Kitaoka |
120a6e |
?E 59 {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout++ = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60 pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
?D 60 *pixout = ROP_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
?I 60 *pixout = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
?E 60
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
static void rop_copy_90_gr8_rgbm(RASTER *rin, RASTER *rout,
|
|
Toshihiro Shimizu |
890ddd |
int x1, int y1, int x2, int y2,
|
|
Toshihiro Shimizu |
890ddd |
int newx, int newy,
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 65 else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
?E 65
|
|
Shinya Kitaoka |
120a6e |
?I 65 else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
?E 65 CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
?E 58 CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
tmp.r = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 57 static void rop_zoom_out_90_gr8_rgbm(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
int tmp;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq;
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq, dindp, dindq;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
?D 61 prest = lp % factor;
|
|
Shinya Kitaoka |
120a6e |
qrest = lq % factor;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
?E 61 plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?D 61 CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?E 61 CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
?D 61 CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?E 61
|
|
Shinya Kitaoka |
120a6e |
?I 61 CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
?E 61 DEFAULT :
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
dindp = dudp + wrapin * dvdp;
|
|
Shinya Kitaoka |
120a6e |
dindq = dudq + wrapin * dvdq;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + startu + startv * wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
tmp += *in;
|
|
Shinya Kitaoka |
120a6e |
in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 63 static void rop_copy_90_rgb_rgb16(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * 3; /* mi muovo di bytes */
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
?D 81 CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 * 3 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(bytein[0], bytein[1], bytein[2]);
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_90_rgb_rgb16(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin_bytes, wrapin_pixels, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq;
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq, dindp, dindq;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin_pixels = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapin_bytes = wrapin_pixels * 3;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
dindp = (dudp + wrapin_pixels * dvdp) * 3;
|
|
Shinya Kitaoka |
120a6e |
dindq = (dudq + wrapin_pixels * dvdq) * 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
?E 81
|
|
Shinya Kitaoka |
120a6e |
?I 81 CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 * 3 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(bytein[0], bytein[1], bytein[2]);
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_90_rgb_rgb16(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin_bytes, wrapin_pixels, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq;
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq, dindp, dindq;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin_pixels = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapin_bytes = wrapin_pixels * 3;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
dindp = (dudp + wrapin_pixels * dvdp) * 3;
|
|
Shinya Kitaoka |
120a6e |
dindq = (dudq + wrapin_pixels * dvdq) * 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
?E 81 tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp_r = (tmp_r + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_g = (tmp_g + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
tmp_b = (tmp_b + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp_r, tmp_g, tmp_b);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 63
|
|
Shinya Kitaoka |
120a6e |
?E 57 static void rop_copy_90_rgb_rgbm(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein, *appo;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout, tmp;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap * 3; /* mi muovo di bytes */
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 3;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
bytein = bufin + u0 * 3 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
appo = bytein;
|
|
Shinya Kitaoka |
120a6e |
tmp.r = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.g = *appo++;
|
|
Shinya Kitaoka |
120a6e |
tmp.b = *appo;
|
|
Shinya Kitaoka |
120a6e |
tmp.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = tmp;
|
|
Shinya Kitaoka |
120a6e |
bytein += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 63 static void rop_zoom_out_90_rgb_rgbm(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *rowin, *pixin, *in;
|
|
Shinya Kitaoka |
120a6e |
int tmp_r, tmp_g, tmp_b;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin_bytes, wrapin_pixels, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq;
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq, dindp, dindq;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin_pixels = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapin_bytes = wrapin_pixels * 3;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
dindp = (dudp + wrapin_pixels * dvdp) * 3;
|
|
Shinya Kitaoka |
120a6e |
dindq = (dudq + wrapin_pixels * dvdq) * 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (UCHAR *)rin->buffer + startu * 3 + startv * wrapin_bytes;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
in = pixin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp + dindq;
|
|
Shinya Kitaoka |
120a6e |
tmp_r += in[0];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += in[1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += in[2];
|
|
Shinya Kitaoka |
120a6e |
in += dindp - dindq;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
in += 2 * dindq - factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += factor * dindq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
pixin += factor * dindp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r = tmp_g = tmp_b = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp_r += pixin[i * dindp + j * dindq];
|
|
Shinya Kitaoka |
120a6e |
tmp_g += pixin[i * dindp + j * dindq + 1];
|
|
Shinya Kitaoka |
120a6e |
tmp_b += pixin[i * dindp + j * dindq + 2];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
valout.r = (tmp_r + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.g = (tmp_g + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.b = (tmp_b + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 63 static void rop_copy_90_bw_gr8(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2,
|
|
Shinya Kitaoka |
120a6e |
?E 56 int newx, int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bufout, *bytein, *byteout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int value_for_0, value_for_1;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
switch (rin->type) {
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : value_for_0 = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 0;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : value_for_0 = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 255;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
printf("bad raster type in rop_copy_90_bw_gr8\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapin = (rin->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47 bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?I 50
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
byteout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
byteout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*byteout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
?I 21
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_bw_cm16(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *cmap;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout, cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
USHORT value_for_0, value_for_1, value_tmp;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 55 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 84 if (!rout->cmap.buffer) {
|
|
Shinya Kitaoka |
120a6e |
msg(MSG_IE, "rop_copy_90_bw_cm16: missing color map");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84 cmap = rout->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 56 cmap_offset = rout->cmap.offset;
|
|
Shinya Kitaoka |
120a6e |
?E 56
|
|
Shinya Kitaoka |
120a6e |
?I 56 cmap_offset = rout->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
?E 56 if (cmap[0].r == 0) {
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = cmap_offset + 255;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = cmap_offset + 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = cmap_offset;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
value_tmp = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = value_tmp;
|
|
Shinya Kitaoka |
120a6e |
?I 22
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapin = (rin->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47 bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?I 50
|
|
Toshihiro Shimizu |
890ddd |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 55
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 84 static void rop_copy_90_bw_cm24(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
ULONG *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
ULONG value_for_0, value_for_1, value_tmp;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
penmap = rout->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rout->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
if (penmap[0].r + colmap[0].r == 0) {
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 255;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
value_tmp = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0 = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = value_tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 84 static void rop_copy_90_bw_rgb16(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
USHORT value_for_0, value_for_1;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch (rin->type) {
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : value_for_0 = 0xffff;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 0x0000;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : value_for_0 = 0x0000;
|
|
Shinya Kitaoka |
120a6e |
value_for_1 = 0xffff;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
printf("bad raster type in rop_copy_90_bw_rgb16\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Shinya Kitaoka |
120a6e |
?I 55 if (dudx) for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 55
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_bw_rgbm(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy,
|
|
Shinya Kitaoka |
120a6e |
?D 52 int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL value_for_0, value_for_1;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw_gr8")
|
|
Shinya Kitaoka |
120a6e |
STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch (rin->type) {
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : value_for_0.r = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.g = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.b = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.m = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.r = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.g = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.b = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.m = 255;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : value_for_0.r = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.g = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.b = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.m = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.r = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.g = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.b = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.m = 255;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
printf("bad raster type in rop_copy_90_bw_rgbm\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 22
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
?D 47 bytewrapin = (rin->wrap + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
?E 47
|
|
Shinya Kitaoka |
120a6e |
?I 47 bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 47 bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
?E 21
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 17
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?I 26
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_copy_90_rgbm(RASTER * rin, RASTER * rout, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2, int newx, int newy,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?I 50 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 50
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *pixin;
|
|
Shinya Kitaoka |
120a6e |
pixin += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 26
|
|
Toshihiro Shimizu |
890ddd |
?E 14
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 6 void rop_clear(RASTER * r, int x1, int y1, int x2, int y2) {
|
|
Shinya Kitaoka |
120a6e |
?D 13 char *pix;
|
|
Shinya Kitaoka |
120a6e |
?E 13
|
|
Toshihiro Shimizu |
890ddd |
?I 13 UCHAR *pix;
|
|
Shinya Kitaoka |
120a6e |
?E 13 int l, x, y, tmp, rowsize, wrap, pixbits;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 - x1 >= r->lx || y2 - y1 >= r->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_clear; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pixbits = rop_pixbits(r->type);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* per adesso niente pixel non multipli di 8 bits */
|
|
Shinya Kitaoka |
120a6e |
?D 2 if (pixbits & 7)
|
|
Toshihiro Shimizu |
890ddd |
?E 2
|
|
Toshihiro Shimizu |
890ddd |
?I 2 if (rop_fillerbits(r->type))
|
|
Shinya Kitaoka |
120a6e |
?E 2 {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_clear; byte fraction pixels\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
wrap = (r->wrap * pixbits) >> 3;
|
|
Shinya Kitaoka |
120a6e |
rowsize = ((x2 - x1 + 1) * pixbits) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?D 10 pix = (char *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 10
|
|
Shinya Kitaoka |
120a6e |
?I 10 pix = (UCHAR *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 10 l = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
while (l-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
memset(pix, 0, rowsize);
|
|
Shinya Kitaoka |
120a6e |
pix += wrap;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 6
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 6
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?I 6
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 25 void
|
|
Shinya Kitaoka |
120a6e |
rop_add_white_to_cmap(RASTER * ras) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
UCHAR m, white;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ras->cmap.size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = ras->cmap.buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].r += white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g += white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b += white;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < ras->cmap.size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void rop_remove_white_from_cmap(RASTER * ras) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
UCHAR m, white;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ras->cmap.size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = ras->cmap.buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].r -= white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g -= white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b -= white;
|
|
Shinya Kitaoka |
120a6e |
if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < ras->cmap.size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
?I 32
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static LPIXEL premult_lpixel(LPIXEL lpixel) {
|
|
Shinya Kitaoka |
120a6e |
int m;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = lpixel.m;
|
|
Shinya Kitaoka |
120a6e |
if (m == 255)
|
|
Shinya Kitaoka |
120a6e |
return lpixel;
|
|
Shinya Kitaoka |
120a6e |
else if (m == 0) {
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.m = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = (lpixel.r * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = (lpixel.g * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = (lpixel.b * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.m = m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static LPIXEL unpremult_lpixel(LPIXEL lpixel) {
|
|
Shinya Kitaoka |
120a6e |
int m, m_2;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = lpixel.m;
|
|
Shinya Kitaoka |
120a6e |
if (m == 255)
|
|
Shinya Kitaoka |
120a6e |
return lpixel;
|
|
Shinya Kitaoka |
120a6e |
else if (m == 0) {
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.m = 0;
|
|
Shinya Kitaoka |
120a6e |
?D 51
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 51
|
|
Toshihiro Shimizu |
890ddd |
?I 51
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 51 else {
|
|
Shinya Kitaoka |
120a6e |
m_2 = m >> 1;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = (lpixel.r * 255 + m_2) / m;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = (lpixel.g * 255 + m_2) / m;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = (lpixel.b * 255 + m_2) / m;
|
|
Toshihiro Shimizu |
890ddd |
?E 52
|
|
Toshihiro Shimizu |
890ddd |
?I 52
|
|
Toshihiro Shimizu |
890ddd |
int mirror, int ninety)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin, *bytein;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int bytewrapin, bitoffsin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL value_for_0, value_for_1;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dudy, dvdy, dudx, dvdx;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_INIT(0, "rop_copy_90_bw_gr8") STW_START(0)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 55 mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
switch (rin->type) {
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_WB : value_for_0.r = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.g = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.b = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.m = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.r = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.g = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.b = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.m = 255;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_BW : value_for_0.r = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.g = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.b = 0;
|
|
Shinya Kitaoka |
120a6e |
value_for_0.m = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.r = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.g = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.b = 255;
|
|
Shinya Kitaoka |
120a6e |
value_for_1.m = 255;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
printf("bad raster type in rop_copy_90_bw_rgbm\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 53
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
?E 53
|
|
Toshihiro Shimizu |
890ddd |
?I 53
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitoffsin = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudx = 0;
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudx = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudx = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdx = 1;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dvdx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (dudx)
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; u += dudx, x++) {
|
|
Shinya Kitaoka |
120a6e |
if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin))
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly; u0 += dudy, y++) {
|
|
Shinya Kitaoka |
120a6e |
u = u0;
|
|
Shinya Kitaoka |
120a6e |
v = v0;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; v += dvdx, x++) {
|
|
Shinya Kitaoka |
120a6e |
?E 53 if (GET_BIT(u, v, bufin, bytewrapin, bitoffsin)) *pixout++ =
|
|
Shinya Kitaoka |
120a6e |
value_for_1;
|
|
Shinya Kitaoka |
120a6e |
else *pixout++ = value_for_0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 55
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
STW_STOP(0) STW_PRINT(stdout)
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
?E 55
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 62 static void rop_zoom_out_90_bw_rgbm(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin;
|
|
Shinya Kitaoka |
120a6e |
int val_0, val_1, tmp;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *rowout, *pixout, valout;
|
|
Shinya Kitaoka |
120a6e |
int bitrowin, bytewrapin, bitwrapin, wrapout, bitin, bit, bit_offs,
|
|
Shinya Kitaoka |
120a6e |
startbit;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq, s, t; /* s=p+q, t=p-q */
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq;
|
|
Shinya Kitaoka |
120a6e |
int dinbitsdp, dinbitsdq, dinbitsds, dinbitsdt;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitwrapin = bytewrapin << 3;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dinbitsdp = dudp + bitwrapin * dvdp;
|
|
Shinya Kitaoka |
120a6e |
dinbitsdq = dudq + bitwrapin * dvdq;
|
|
Shinya Kitaoka |
120a6e |
dinbitsds = dinbitsdp + dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
dinbitsdt = dinbitsdp - dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bitrowin = bit_offs + startu + startv * bitwrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
valout.m = 0xff;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
bitin = bitrowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
bit = bitin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bit, bufin);
|
|
Shinya Kitaoka |
120a6e |
bit += dinbitsds;
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bit, bufin);
|
|
Shinya Kitaoka |
120a6e |
bit += dinbitsdt;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bit += 2 * dinbitsdq - factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
bitin += factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_prest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bitrowin += factor * dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
bitin = bitrowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (qrest_fac - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
bitin += factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (qrest_prest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
valout.r = valout.g = valout.b = tmp;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
static void rop_zoom_out_90_bw_rgb16(
|
|
Shinya Kitaoka |
120a6e |
RASTER * rin, RASTER * rout, int x1, int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int abs_zoom_level, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *bufin;
|
|
Shinya Kitaoka |
120a6e |
int val_0, val_1, tmp;
|
|
Shinya Kitaoka |
120a6e |
USHORT *bufout, *rowout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int bitrowin, bytewrapin, bitwrapin, wrapout, bitin, bit, bit_offs,
|
|
Shinya Kitaoka |
120a6e |
startbit;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, startu, startv;
|
|
Shinya Kitaoka |
120a6e |
int p, q, lp, lq, s, t; /* s=p+q, t=p-q */
|
|
Shinya Kitaoka |
120a6e |
int dudp, dvdp, dudq, dvdq;
|
|
Shinya Kitaoka |
120a6e |
int dinbitsdp, dinbitsdq, dinbitsds, dinbitsdt;
|
|
Shinya Kitaoka |
120a6e |
int plast, qlast, prest, qrest, i, j;
|
|
Shinya Kitaoka |
120a6e |
int factor, fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac, qrest_fac, fac_prest, qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_2, qrest_fac_2, fac_prest_2, qrest_prest_2;
|
|
Shinya Kitaoka |
120a6e |
int fac_fac_4;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_zoom_out(rin, rout, x1, y1, x2, y2, newx, newy, abs_zoom_level);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
val_0 = 0x00;
|
|
Shinya Kitaoka |
120a6e |
val_1 = 0xff;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lp = lv;
|
|
Shinya Kitaoka |
120a6e |
lq = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lp = lu;
|
|
Shinya Kitaoka |
120a6e |
lq = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
prest = lp & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
qrest = lq & (factor - 1);
|
|
Shinya Kitaoka |
120a6e |
plast = lp - prest;
|
|
Shinya Kitaoka |
120a6e |
qlast = lq - qrest;
|
|
Shinya Kitaoka |
120a6e |
fac_fac = factor * factor;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2 = fac_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_4 = fac_fac >> 2;
|
|
Shinya Kitaoka |
120a6e |
fac_fac_2_bits = 2 * abs_zoom_level - 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac = qrest * factor;
|
|
Shinya Kitaoka |
120a6e |
qrest_fac_2 = qrest_fac >> 1;
|
|
Shinya Kitaoka |
120a6e |
fac_prest = factor * prest;
|
|
Shinya Kitaoka |
120a6e |
fac_prest_2 = fac_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest = qrest * prest;
|
|
Shinya Kitaoka |
120a6e |
qrest_prest_2 = qrest_prest >> 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
bytewrapin = (rin->wrap + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
bitwrapin = bytewrapin << 3;
|
|
Shinya Kitaoka |
120a6e |
bit_offs = rin->bit_offs;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : dudp = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 1;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = -1;
|
|
Shinya Kitaoka |
120a6e |
dudq = -1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u2;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : dudp = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 0;
|
|
Shinya Kitaoka |
120a6e |
dudq = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdq = -1;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v2;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : dudp = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdp = 1;
|
|
Shinya Kitaoka |
120a6e |
dudq = 1;
|
|
Shinya Kitaoka |
120a6e |
dvdq = 0;
|
|
Shinya Kitaoka |
120a6e |
startu = u1;
|
|
Shinya Kitaoka |
120a6e |
startv = v1;
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
?D 78 assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 abort();
|
|
Shinya Kitaoka |
120a6e |
dudp = dvdp = dudq = dvdq = startu = startv = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
dinbitsdp = dudp + bitwrapin * dvdp;
|
|
Shinya Kitaoka |
120a6e |
dinbitsdq = dudq + bitwrapin * dvdq;
|
|
Shinya Kitaoka |
120a6e |
dinbitsds = dinbitsdp + dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
dinbitsdt = dinbitsdp - dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bitrowin = bit_offs + startu + startv * bitwrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout = (USHORT *)rout->buffer + newx + newy * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (q = 0; q < qlast; q += factor) {
|
|
Shinya Kitaoka |
120a6e |
bitin = bitrowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
bit = bitin;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j += 2) {
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i += 2) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bit, bufin);
|
|
Shinya Kitaoka |
120a6e |
bit += dinbitsds;
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bit, bufin);
|
|
Shinya Kitaoka |
120a6e |
bit += dinbitsdt;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bit += 2 * dinbitsdq - factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_fac_2 - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_fac_4) >> fac_fac_2_bits;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
bitin += factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < factor; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (fac_prest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + fac_prest_2) / fac_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
bitrowin += factor * dinbitsdq;
|
|
Shinya Kitaoka |
120a6e |
rowout += wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (qrest) {
|
|
Shinya Kitaoka |
120a6e |
bitin = bitrowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (p = 0; p < plast; p += factor) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < factor; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (qrest_fac - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_fac_2) / qrest_fac;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
bitin += factor * dinbitsdp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (prest) {
|
|
Shinya Kitaoka |
120a6e |
tmp = 0;
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < qrest; j++)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < prest; i++) {
|
|
Shinya Kitaoka |
120a6e |
tmp += GET_BWBIT(bitin + i * dinbitsdp + j * dinbitsdq, bufin);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
tmp = tmp * val_1 + (qrest_prest - tmp) * val_0;
|
|
Shinya Kitaoka |
120a6e |
tmp = (tmp + qrest_prest_2) / qrest_prest;
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = PIX_RGB16_FROM_BYTES(tmp, tmp, tmp);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 62 static void rop_copy_90_rgbm(RASTER * rin, RASTER * rout, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1, int x2, int y2, int newx,
|
|
Shinya Kitaoka |
120a6e |
int newy, int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *bufout, *pixout;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int u, v, lu, lv, su, sv, u00, v00, u0, v0, dindx, dudy, dvdy;
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
int u1, v1, u2, v2;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
mirror &= 1;
|
|
Shinya Kitaoka |
120a6e |
ninety &= 3;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!ninety && !mirror) {
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, x1, y1, x2, y2, newx, newy);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
u1 = x1;
|
|
Shinya Kitaoka |
120a6e |
v1 = y1;
|
|
Shinya Kitaoka |
120a6e |
u2 = x2;
|
|
Shinya Kitaoka |
120a6e |
v2 = y2;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
su = u2 - u1;
|
|
Shinya Kitaoka |
120a6e |
sv = v2 - v1;
|
|
Shinya Kitaoka |
120a6e |
lu = u2 - u1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lv = v2 - v1 + 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
lx = lv;
|
|
Shinya Kitaoka |
120a6e |
ly = lu;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
lx = lu;
|
|
Shinya Kitaoka |
120a6e |
ly = lv;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
bufin = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
bufout = rout->buffer;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
dudy = 0;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch ((mirror << 2) + ninety) {
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 0 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 1 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 2 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(0 << 2) + 3 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 0 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dvdy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 1 : u00 = u1 + su;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dudy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = -wrapin;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 2 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1 + sv;
|
|
Shinya Kitaoka |
120a6e |
dvdy = -1;
|
|
Shinya Kitaoka |
120a6e |
dindx = 1;
|
|
Shinya Kitaoka |
120a6e |
CASE(1 << 2) + 3 : u00 = u1;
|
|
Shinya Kitaoka |
120a6e |
v00 = v1;
|
|
Shinya Kitaoka |
120a6e |
dudy = 1;
|
|
Shinya Kitaoka |
120a6e |
dindx = wrapin;
|
|
Shinya Kitaoka |
120a6e |
?D 78 DEFAULT : assert(FALSE);
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Toshihiro Shimizu |
890ddd |
?I 78 DEFAULT : abort();
|
|
Shinya Kitaoka |
120a6e |
u00 = v00 = dudy = dindx = 0;
|
|
Shinya Kitaoka |
120a6e |
?E 78
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (u0 = u00, v0 = v00, y = newy; y < newy + ly;
|
|
Shinya Kitaoka |
120a6e |
u0 += dudy, v0 += dvdy, y++) {
|
|
Shinya Kitaoka |
120a6e |
pixin = bufin + u0 + v0 * wrapin;
|
|
Shinya Kitaoka |
120a6e |
pixout = bufout + newx + y * wrapout;
|
|
Shinya Kitaoka |
120a6e |
for (x = newx; x < newx + lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = *pixin;
|
|
Shinya Kitaoka |
120a6e |
pixin += dindx;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* vedi sia rop_zoom_out che rop_copy_90
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
void rop_zoom_out_90(RASTER * rin, RASTER * rout, int x1, int y1, int x2,
|
|
Shinya Kitaoka |
120a6e |
int y2, int newx, int newy, int abs_zoom_level,
|
|
Shinya Kitaoka |
120a6e |
int mirror, int ninety) {
|
|
Shinya Kitaoka |
120a6e |
int tmp, newlx, newly;
|
|
Shinya Kitaoka |
120a6e |
int rasras, factor, abszl;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
abszl = abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
factor = 1 << abs_zoom_level;
|
|
Shinya Kitaoka |
120a6e |
if (factor == 1)
|
|
Shinya Kitaoka |
120a6e |
rop_copy_90(rin, rout, x1, y1, x2, y2, newx, newy, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* raddrizzo gli estremi */
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
if (ninety & 1) {
|
|
Shinya Kitaoka |
120a6e |
newlx = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
newlx = (x2 - x1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
newly = (y2 - y1 + factor) / factor;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 >= rin->lx || y2 >= rin->ly || newx < 0 ||
|
|
Shinya Kitaoka |
120a6e |
newy < 0 || newx + newlx > rout->lx || newy + newly > rout->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf(
|
|
Shinya Kitaoka |
120a6e |
"### INTERNAL ERROR - rop_zoom_out; access violation\n"
|
|
Shinya Kitaoka |
120a6e |
" ((%d,%d)(%d,%d)in(%dx%d)->(%d,%d)in(%dx%d))\n",
|
|
Shinya Kitaoka |
120a6e |
x1, y1, x2, y2, rin->lx, rin->ly, newx, newy, rout->lx, rout->ly);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rasras = RASRAS(rin->type, rout->type);
|
|
Shinya Kitaoka |
120a6e |
switch (rasras) {
|
|
Shinya Kitaoka |
120a6e |
?I 62 CASE RASRAS(RAS_WB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_bw_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_WB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_WB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_BW, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_bw_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 62 CASE RASRAS(RAS_GR8, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_gr8_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl, mirror, ninety);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_GR8, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_GR8, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_gr8_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl,
|
|
Toshihiro Shimizu |
890ddd |
?I 63 mirror, ninety);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB16)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_rgb_rgb16(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl, mirror, ninety);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
CASE RASRAS(RAS_RGB, RAS_RGB_)
|
|
Shinya Kitaoka |
120a6e |
: __OR RASRAS(RAS_RGB, RAS_RGBM)
|
|
Shinya Kitaoka |
120a6e |
: rop_zoom_out_90_rgb_rgbm(rin, rout, x1, y1, x2, y2, newx, newy,
|
|
Shinya Kitaoka |
120a6e |
abszl,
|
|
Toshihiro Shimizu |
890ddd |
?E 63 mirror, ninety);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
DEFAULT:
|
|
Shinya Kitaoka |
120a6e |
assert(!"rop_zoom_out_90; invalid raster combination");
|
|
Shinya Kitaoka |
120a6e |
?E 57
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_clear(RASTER * r, int x1, int y1, int x2, int y2) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *pix;
|
|
Shinya Kitaoka |
120a6e |
?D 89 int l, x, y, tmp, rowsize, wrap, pixbits;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 ULONG *row24, *pix24;
|
|
Shinya Kitaoka |
120a6e |
?D 93 int lines, x, y, lx, tmp, rowsize, wrap, pixbits;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Toshihiro Shimizu |
890ddd |
?I 93 int lines, x, y, lx, tmp, rowbytes, wrap, bytewrap, pixbits;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (x1 > x2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = x1;
|
|
Shinya Kitaoka |
120a6e |
x1 = x2;
|
|
Shinya Kitaoka |
120a6e |
x2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (y1 > y2) {
|
|
Shinya Kitaoka |
120a6e |
tmp = y1;
|
|
Shinya Kitaoka |
120a6e |
y1 = y2;
|
|
Shinya Kitaoka |
120a6e |
y2 = tmp;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* controllo gli sconfinamenti */
|
|
Shinya Kitaoka |
120a6e |
if (x1 < 0 || y1 < 0 || x2 - x1 >= r->lx || y2 - y1 >= r->ly) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_clear; access violation\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pixbits = rop_pixbits(r->type);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* per adesso niente pixel non multipli di 8 bits */
|
|
Shinya Kitaoka |
120a6e |
if (rop_fillerbits(r->type)) {
|
|
Shinya Kitaoka |
120a6e |
printf("### INTERNAL ERROR - rop_clear; byte fraction pixels\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 93 wrap = (r->wrap * pixbits) >> 3;
|
|
Shinya Kitaoka |
120a6e |
rowsize = ((x2 - x1 + 1) * pixbits) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Shinya Kitaoka |
120a6e |
?I 93 wrap = r->wrap;
|
|
Shinya Kitaoka |
120a6e |
bytewrap = (wrap * pixbits + 7) >> 3;
|
|
Shinya Kitaoka |
120a6e |
rowbytes = ((x2 - x1 + 1) * pixbits) >> 3;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Shinya Kitaoka |
120a6e |
?D 89 pix = (UCHAR *)r->buffer + (((x1 + y1 * r->wrap) * pixbits) >> 3);
|
|
Shinya Kitaoka |
120a6e |
l = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
while (l-- > 0)
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Shinya Kitaoka |
120a6e |
?I 89 lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
lines = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
if (r->type == RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
row24 = (ULONG *)r->buffer + x1 + y1 * wrap;
|
|
Shinya Kitaoka |
120a6e |
while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pix24 = row24;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) *pix24++ &= 0xff000000;
|
|
Shinya Kitaoka |
120a6e |
row24 += wrap;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
?D 93 pix = (UCHAR *)r->buffer + (((x1 + y1 * wrap) * pixbits) >> 3);
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Toshihiro Shimizu |
890ddd |
?I 93 pix = (UCHAR *)r->buffer + ((x1 * pixbits) >> 3) + y1 * bytewrap;
|
|
Shinya Kitaoka |
120a6e |
?E 93 while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
?D 93 memset(pix, 0, rowsize);
|
|
Shinya Kitaoka |
120a6e |
pix += wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Toshihiro Shimizu |
890ddd |
?I 93 memset(pix, 0, rowbytes);
|
|
Shinya Kitaoka |
120a6e |
pix += bytewrap;
|
|
Shinya Kitaoka |
120a6e |
?E 93
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void rop_and_extra_bits(RASTER * ras, UCHAR and_mask, int x1, int y1,
|
|
Shinya Kitaoka |
120a6e |
int x2, int y2) {
|
|
Shinya Kitaoka |
120a6e |
int x, y, lx, ly, wrap;
|
|
Shinya Kitaoka |
120a6e |
ULONG *row24, *pix24, and_mask24;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *row8, *pix8;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
lx = x2 - x1 + 1;
|
|
Shinya Kitaoka |
120a6e |
ly = y2 - y1 + 1;
|
|
Shinya Kitaoka |
120a6e |
wrap = ras->wrap;
|
|
Shinya Kitaoka |
120a6e |
if (ras->type == RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
and_mask24 = (and_mask << 24) | 0xffffff;
|
|
Shinya Kitaoka |
120a6e |
row24 = (ULONG *)ras->buffer + x1 + y1 * wrap;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++, row24 += wrap) {
|
|
Shinya Kitaoka |
120a6e |
pix24 = row24;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++, pix24++) *pix24 &= and_mask24;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
?E 89 {
|
|
Shinya Kitaoka |
120a6e |
?D 89 memset(pix, 0, rowsize);
|
|
Shinya Kitaoka |
120a6e |
pix += wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 if (!ras->extra) return;
|
|
Shinya Kitaoka |
120a6e |
row8 = ras->extra + x1 + y1 * wrap;
|
|
Shinya Kitaoka |
120a6e |
for (y = 0; y < ly; y++, row8 += wrap) {
|
|
Shinya Kitaoka |
120a6e |
pix8 = row8;
|
|
Shinya Kitaoka |
120a6e |
if (and_mask)
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++, pix8++) *row8 &= and_mask;
|
|
Shinya Kitaoka |
120a6e |
else
|
|
Shinya Kitaoka |
120a6e |
memset(row8, 0, lx);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_add_white_to_cmap(RASTER * ras) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
UCHAR m, white;
|
|
Shinya Kitaoka |
120a6e |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 int cmap_size;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 int cmap_size, colbuf_size, penbuf_size;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *buffer, *penbuffer, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 82 for (i = 0; i < ras->cmap.size; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cmap_size; i++)
|
|
Shinya Kitaoka |
120a6e |
?E 82 {
|
|
Shinya Kitaoka |
120a6e |
m = ras->cmap.buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].r += white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g += white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b += white;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 buffer = ras->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
if (buffer) {
|
|
Shinya Kitaoka |
120a6e |
cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cmap_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
if (buffer[i].r > m || buffer[i].g > m || buffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].r += white;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].g += white;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].b += white;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < cmap_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
} else if (colbuffer && penbuffer) {
|
|
Shinya Kitaoka |
120a6e |
colbuf_size = TCM_MIN_CMAP_COLBUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
penbuf_size = TCM_MIN_CMAP_PENBUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < colbuf_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = colbuffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
if (colbuffer[i].r > m || colbuffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)i - m; /* i & 0xff == tone */
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].r += white;
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].g += white;
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].b += white;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < colbuf_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr,
|
|
Shinya Kitaoka |
120a6e |
"\7add_white: color cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < penbuf_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = penbuffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
if (penbuffer[i].r > m || penbuffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)~i - m; /* 255 - (i & 0xff) == 255 - tone */
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].r += white;
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].g += white;
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].b += white;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < penbuf_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr,
|
|
Shinya Kitaoka |
120a6e |
"\7add_white: pencil cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 82 if (i < ras->cmap.size)
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 if (i < cmap_size)
|
|
Toshihiro Shimizu |
890ddd |
?E 82 fprintf(stderr, "\7add_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_remove_white_from_cmap(RASTER * ras) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Shinya Kitaoka |
120a6e |
UCHAR m, white;
|
|
Shinya Kitaoka |
120a6e |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 int cmap_size;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 int cmap_size, colbuf_size, penbuf_size;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *buffer, *penbuffer, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 82 for (i = 0; i < ras->cmap.size; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cmap_size; i++)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 buffer = ras->cmap.buffer;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
if (buffer) {
|
|
Shinya Kitaoka |
120a6e |
cmap_size = TCM_MIN_CMAP_BUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < cmap_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].r -= white;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].g -= white;
|
|
Shinya Kitaoka |
120a6e |
buffer[i].b -= white;
|
|
Shinya Kitaoka |
120a6e |
if (buffer[i].r > m || buffer[i].g > m || buffer[i].b > m) break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < cmap_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
} else if (colbuffer && penbuffer)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?E 82 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 m = ras->cmap.buffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)255 - m;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].r -= white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].g -= white;
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b -= white;
|
|
Shinya Kitaoka |
120a6e |
if (ras->cmap.buffer[i].r > m || ras->cmap.buffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
ras->cmap.buffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 colbuf_size = TCM_MIN_CMAP_COLBUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
penbuf_size = TCM_MIN_CMAP_PENBUFFER_SIZE(ras->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < colbuf_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = colbuffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)i - m; /* i & 0xff == tone */
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].r -= white;
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].g -= white;
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].b -= white;
|
|
Shinya Kitaoka |
120a6e |
if (colbuffer[i].r > m || colbuffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
colbuffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < colbuf_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr,
|
|
Shinya Kitaoka |
120a6e |
"\7add_white: color cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < penbuf_size; i++) {
|
|
Shinya Kitaoka |
120a6e |
m = penbuffer[i].m;
|
|
Shinya Kitaoka |
120a6e |
white = (UCHAR)~i - m; /* 255 - (i & 0xff) == 255 - tone */
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].r -= white;
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].g -= white;
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].b -= white;
|
|
Shinya Kitaoka |
120a6e |
if (penbuffer[i].r > m || penbuffer[i].g > m ||
|
|
Shinya Kitaoka |
120a6e |
penbuffer[i].b > m)
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (i < penbuf_size)
|
|
Shinya Kitaoka |
120a6e |
fprintf(stderr,
|
|
Shinya Kitaoka |
120a6e |
"\7add_white: pencil cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 82 if (i < ras->cmap.size)
|
|
Toshihiro Shimizu |
890ddd |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82
|
|
Toshihiro Shimizu |
890ddd |
?D 84 if (i < cmap_size)
|
|
Toshihiro Shimizu |
890ddd |
?E 82 fprintf(stderr, "\7remove_white: cmap is not premultiplied\n");
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84 static LPIXEL premult_lpixel(LPIXEL lpixel)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 LPIXEL premult_lpixel(LPIXEL lpixel)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 int m;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 UINT m, mm;
|
|
Shinya Kitaoka |
120a6e |
?E 84 LPIXEL new_lpixel;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
m = lpixel.m;
|
|
Shinya Kitaoka |
120a6e |
if (m == 255)
|
|
Toshihiro Shimizu |
890ddd |
?D 84 return lpixel;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 new_lpixel = lpixel;
|
|
Shinya Kitaoka |
120a6e |
?E 84 else if (m == 0) {
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = 0;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.m = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
?D 84 new_lpixel.r = (lpixel.r * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = (lpixel.g * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = (lpixel.b * m + 127) / 255;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 mm = m * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = (lpixel.r * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = (lpixel.g * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = (lpixel.b * mm + (1U << 23)) >> 24;
|
|
Shinya Kitaoka |
120a6e |
?E 84 new_lpixel.m = m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84 static LPIXEL unpremult_lpixel(LPIXEL lpixel)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 LPIXEL unpremult_lpixel(LPIXEL lpixel)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
int m, m_2;
|
|
Shinya Kitaoka |
120a6e |
LPIXEL new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
m = lpixel.m;
|
|
Shinya Kitaoka |
120a6e |
if (m == 255)
|
|
Shinya Kitaoka |
120a6e |
return lpixel;
|
|
Shinya Kitaoka |
120a6e |
else if (m == 0) {
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = 255;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.m = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
m_2 = m >> 1;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.r = (lpixel.r * 255 + m_2) / m;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.g = (lpixel.g * 255 + m_2) / m;
|
|
Shinya Kitaoka |
120a6e |
new_lpixel.b = (lpixel.b * 255 + m_2) / m;
|
|
Shinya Kitaoka |
120a6e |
?E 52 new_lpixel.m = m;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return new_lpixel;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_ramp(RASTER * ras, TCM_INFO info,
|
|
Shinya Kitaoka |
120a6e |
?D 89 LPIXEL color, LPIXEL pencil, int color_index, int pencil_index,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *ramp;
|
|
Shinya Kitaoka |
120a6e |
int ramp_index;
|
|
Shinya Kitaoka |
120a6e |
int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
|
|
Shinya Kitaoka |
120a6e |
int tone, tmax, tmax_2;
|
|
Shinya Kitaoka |
120a6e |
int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 34
|
|
Toshihiro Shimizu |
890ddd |
?D 35
|
|
Shinya Kitaoka |
120a6e |
/* Secondo noi (Grisu & Roberto) l'offset non ci vuole
|
|
Toshihiro Shimizu |
890ddd |
?E 34
|
|
Toshihiro Shimizu |
890ddd |
ramp_index = color_index << info.color_offs |
|
|
Shinya Kitaoka |
120a6e |
pencil_index << info.pencil_offs | info.offset_mask;
|
|
Toshihiro Shimizu |
890ddd |
?I 34
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
ramp_index = color_index << info.color_offs |
|
|
Shinya Kitaoka |
120a6e |
pencil_index << info.pencil_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 35
|
|
Shinya Kitaoka |
120a6e |
?I 35 ramp_index =
|
|
Shinya Kitaoka |
120a6e |
color_index << info.color_offs | pencil_index << info.pencil_offs;
|
|
Shinya Kitaoka |
120a6e |
?E 35
|
|
Toshihiro Shimizu |
890ddd |
?E 34 ramp = ras->cmap.buffer + ramp_index;
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
d_r = c_r - p_r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
d_g = c_g - p_g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
d_b = c_b - p_b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
d_m = c_m - p_m;
|
|
Shinya Kitaoka |
120a6e |
tmax = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2 = tmax >> 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
ramp[0] = pencil;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 1; tone < info.n_tones - 1; tone++) {
|
|
Shinya Kitaoka |
120a6e |
val.r = p_r + (d_r * tone + tmax_2_r) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.g = p_g + (d_g * tone + tmax_2_g) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.b = p_b + (d_b * tone + tmax_2_b) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.m = p_m + (d_m * tone + tmax_2_m) / tmax;
|
|
Shinya Kitaoka |
120a6e |
?D 82 ramp[tone << info.tone_offs] = val;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Shinya Kitaoka |
120a6e |
?I 82 ramp[tone] = val;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
ramp[info.n_tones - 1] = color;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 84 void rop_fill_cmap_colramp(RASTER * ras, TCM_INFO info,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL color, int color_index,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, tone;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_tone, c_r, c_g, c_b, c_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = color_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++) {
|
|
Shinya Kitaoka |
120a6e |
magic_tone = tone * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
colbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
|
|
Shinya Kitaoka |
120a6e |
int pencil_index,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *penbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, enot;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_enot, p_r, p_g, p_b, p_m;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied)
|
|
Shinya Kitaoka |
120a6e |
?D 88 pencil = premult(pencil);
|
|
Shinya Kitaoka |
120a6e |
?E 88
|
|
Shinya Kitaoka |
120a6e |
?I 88 pencil = rop_premult(pencil);
|
|
Shinya Kitaoka |
120a6e |
?E 88 p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = pencil_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (enot = info.n_tones - 1; enot >= 0; enot--) {
|
|
Shinya Kitaoka |
120a6e |
magic_enot = enot * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
penbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 36 void rop_custom_fill_cmap_ramp(
|
|
Shinya Kitaoka |
120a6e |
RASTER * ras, TCM_INFO info, LPIXEL color, LPIXEL pencil,
|
|
Shinya Kitaoka |
120a6e |
int color_index, int pencil_index, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *ramp;
|
|
Shinya Kitaoka |
120a6e |
int ramp_index;
|
|
Shinya Kitaoka |
120a6e |
int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
|
|
Shinya Kitaoka |
120a6e |
int tone, tmax, tmax_2;
|
|
Shinya Kitaoka |
120a6e |
int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ramp_index =
|
|
Shinya Kitaoka |
120a6e |
color_index << info.color_offs | pencil_index << info.pencil_offs;
|
|
Shinya Kitaoka |
120a6e |
ramp = ras->cmap.buffer + ramp_index;
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
d_r = c_r - p_r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
d_g = c_g - p_g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
d_b = c_b - p_b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
d_m = c_m - p_m;
|
|
Shinya Kitaoka |
120a6e |
tmax = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2 = tmax >> 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
?D 37 ramp[0] = pencil;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 1; tone < info.n_tones - 1; tone++)
|
|
Shinya Kitaoka |
120a6e |
?E 37
|
|
Toshihiro Shimizu |
890ddd |
?I 37 for (tone = 0; tone < info.n_tones; tone++)
|
|
Shinya Kitaoka |
120a6e |
?E 37 {
|
|
Shinya Kitaoka |
120a6e |
?D 37
|
|
Shinya Kitaoka |
120a6e |
/* only the following 4 lines are different from the
|
|
Shinya Kitaoka |
120a6e |
non-custom version */
|
|
Shinya Kitaoka |
120a6e |
?E 37 val.r = p_r + (d_r * custom_tone[tone] + tmax_2_r) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.g = p_g + (d_g * custom_tone[tone] + tmax_2_g) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.b = p_b + (d_b * custom_tone[tone] + tmax_2_b) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.m = p_m + (d_m * custom_tone[tone] + tmax_2_m) / tmax;
|
|
Shinya Kitaoka |
120a6e |
?D 82 ramp[tone << info.tone_offs] = val;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Shinya Kitaoka |
120a6e |
?I 82 ramp[tone] = val;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 37 ramp[info.n_tones - 1] = color;
|
|
Shinya Kitaoka |
120a6e |
?E 37
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 36
|
|
Shinya Kitaoka |
120a6e |
?D 84 void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * pencil, int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
?D 82 int min_cmap_buffer_size, i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82 int i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 82 min_cmap_buffer_size = TCM_MIN_CMAP_BUFFER_SIZE(info);
|
|
Shinya Kitaoka |
120a6e |
?D 33 assert(min_cmap_buffer_size < ras->cmap.size);
|
|
Shinya Kitaoka |
120a6e |
?E 33
|
|
Toshihiro Shimizu |
890ddd |
?I 33 assert(ras->cmap.size >= min_cmap_buffer_size);
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?E 33 for (i = 0; i < info.n_colors; i++) for (j = 0; j < info.n_pencils; j++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied);
|
|
Shinya Kitaoka |
120a6e |
?I 36
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_buffer(
|
|
Shinya Kitaoka |
120a6e |
RASTER * ras, TCM_INFO info, LPIXEL * color, LPIXEL * pencil,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied, int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
?D 82 int min_cmap_buffer_size, i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
?I 82 int i, j;
|
|
Shinya Kitaoka |
120a6e |
?E 82
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 82 min_cmap_buffer_size = TCM_MIN_CMAP_BUFFER_SIZE(info);
|
|
Shinya Kitaoka |
120a6e |
assert(ras->cmap.size >= min_cmap_buffer_size);
|
|
Shinya Kitaoka |
120a6e |
?E 82 for (i = 0; i < info.n_colors;
|
|
Shinya Kitaoka |
120a6e |
i++) for (j = 0; j < info.n_pencils; j++)
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied, custom_tone);
|
|
Shinya Kitaoka |
120a6e |
?E 36
|
|
Toshihiro Shimizu |
890ddd |
?E 32
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 66
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 void
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
|
|
Shinya Kitaoka |
120a6e |
int color_index, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, tone;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_tone, c_r, c_g, c_b, c_m;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 77
|
|
Shinya Kitaoka |
120a6e |
?D 84 void release_raster(RASTER * raster) {
|
|
Shinya Kitaoka |
120a6e |
if (!raster->native_buffer)
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 if (!already_premultiplied) color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = color_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 tmsg_error("release_raster, missing buffer");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 magic_tone = custom_tone[tone] * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
colbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?D 84
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
release_memory_chunk(raster->native_buffer);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (raster->type == RAS_CM16 && raster->cmap.buffer)
|
|
Shinya Kitaoka |
120a6e |
free(raster->cmap.buffer);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
memset(raster, 0, sizeof(RASTER));
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void create_raster(RASTER * raster, int xsize, int ysize,
|
|
Shinya Kitaoka |
120a6e |
RAS_TYPE type) {
|
|
Shinya Kitaoka |
120a6e |
int pixsize;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
memset(raster, 0, sizeof(RASTER));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
pixsize = rop_pixbytes(type);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!(raster->native_buffer =
|
|
Shinya Kitaoka |
120a6e |
get_memory_chunk(xsize * ysize * pixsize)))
|
|
Shinya Kitaoka |
120a6e |
tmsg_fatal("can't allocate %d Mbytes",
|
|
Shinya Kitaoka |
120a6e |
((xsize / 1024) * (ysize / 1024)) * pixsize);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
raster->buffer = raster->native_buffer;
|
|
Shinya Kitaoka |
120a6e |
raster->type = type;
|
|
Shinya Kitaoka |
120a6e |
raster->wrap = raster->lx = xsize;
|
|
Shinya Kitaoka |
120a6e |
raster->ly = ysize;
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 80
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int
|
|
Shinya Kitaoka |
120a6e |
create_subraster(RASTER * rin, RASTER * rout, int x0, int y0,
|
|
Shinya Kitaoka |
120a6e |
int x1, int y1) {
|
|
Shinya Kitaoka |
120a6e |
if (x1 < x0 || y1 < y0) return FALSE;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
*rout = *rin;
|
|
Shinya Kitaoka |
120a6e |
if (x0 < 0) x0 = 0;
|
|
Shinya Kitaoka |
120a6e |
if (y0 < 0) y0 = 0;
|
|
Shinya Kitaoka |
120a6e |
if (x1 > rin->lx - 1) x1 = rin->lx - 1;
|
|
Shinya Kitaoka |
120a6e |
if (y1 > rin->ly - 1) y1 = rin->ly - 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rout->lx = x1 - x0 + 1;
|
|
Shinya Kitaoka |
120a6e |
rout->ly = y1 - y0 + 1;
|
|
Shinya Kitaoka |
120a6e |
rout->buffer = (UCHAR *)(rin->buffer) +
|
|
Shinya Kitaoka |
120a6e |
(y0 * rin->wrap + x0) * rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
return TRUE;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?D 84
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 84 void
|
|
Shinya Kitaoka |
120a6e |
clone_raster(RASTER * rin, RASTER * rout)
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Shinya Kitaoka |
120a6e |
?I 84 void
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_penramp(
|
|
Shinya Kitaoka |
120a6e |
RASTER * ras, TCM_INFO info, LPIXEL pencil, int pencil_index,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied, int *custom_tone)
|
|
Shinya Kitaoka |
120a6e |
?E 84 {
|
|
Shinya Kitaoka |
120a6e |
?D 84 create_raster(rout, rin->lx, rin->ly, rin->type);
|
|
Shinya Kitaoka |
120a6e |
rop_copy(rin, rout, 0, 0, rin->lx - 1, rin->ly - 1, 0, 0);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?I 84 LPIXEL val, *penbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, enot;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_enot, p_r, p_g, p_b, p_m;
|
|
Shinya Kitaoka |
120a6e |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 84 if (!already_premultiplied)
|
|
Shinya Kitaoka |
120a6e |
?D 88 pencil = premult(pencil);
|
|
Shinya Kitaoka |
120a6e |
?E 88
|
|
Shinya Kitaoka |
120a6e |
?I 88 pencil = rop_premult(pencil);
|
|
Shinya Kitaoka |
120a6e |
?E 88
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|
|
Toshihiro Shimizu |
890ddd |
?E 80
|
|
Toshihiro Shimizu |
890ddd |
?E 77
|
|
Toshihiro Shimizu |
890ddd |
?E 66
|
|
Toshihiro Shimizu |
890ddd |
?E 25
|
|
Toshihiro Shimizu |
890ddd |
?E 6
|
|
Toshihiro Shimizu |
890ddd |
?E 1
|
|
Shinya Kitaoka |
120a6e |
?I 84 p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = pencil_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (enot = info.n_tones - 1; enot >= 0; enot--) {
|
|
Shinya Kitaoka |
120a6e |
magic_enot = custom_tone[enot] * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
penbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * pencil, int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
int i, j;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < info.n_pencils; j++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_colramp(ras, info, color[i], i,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89
|
|
Toshihiro Shimizu |
890ddd |
LPIXEL color, LPIXEL pencil,
|
|
Toshihiro Shimizu |
890ddd |
int color_index, int pencil_index,
|
|
Toshihiro Shimizu |
890ddd |
int already_premultiplied)
|
|
Toshihiro Shimizu |
890ddd |
{
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *ramp;
|
|
Shinya Kitaoka |
120a6e |
int ramp_index;
|
|
Shinya Kitaoka |
120a6e |
int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
|
|
Shinya Kitaoka |
120a6e |
int tone, tmax, tmax_2;
|
|
Shinya Kitaoka |
120a6e |
int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ramp_index =
|
|
Shinya Kitaoka |
120a6e |
color_index << info.color_offs | pencil_index << info.pencil_offs;
|
|
Shinya Kitaoka |
120a6e |
ramp = ras->cmap.buffer + ramp_index;
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
d_r = c_r - p_r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
d_g = c_g - p_g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
d_b = c_b - p_b;
|
|
Shinya Kitaoka |
120a6e |
?D 94 c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
d_m = c_m - p_m;
|
|
Shinya Kitaoka |
120a6e |
tmax = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2 = tmax >> 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
?E 94
|
|
Shinya Kitaoka |
120a6e |
?I 94 c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
d_m = c_m - p_m;
|
|
Shinya Kitaoka |
120a6e |
tmax = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2 = tmax >> 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
?E 94 tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
ramp[0] = pencil;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 1; tone < info.n_tones - 1; tone++) {
|
|
Shinya Kitaoka |
120a6e |
val.r = p_r + (d_r * tone + tmax_2_r) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.g = p_g + (d_g * tone + tmax_2_g) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.b = p_b + (d_b * tone + tmax_2_b) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.m = p_m + (d_m * tone + tmax_2_m) / tmax;
|
|
Shinya Kitaoka |
120a6e |
ramp[tone] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
ramp[info.n_tones - 1] = color;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
|
|
Shinya Kitaoka |
120a6e |
int color_index, int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, tone;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_tone, c_r, c_g, c_b, c_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = color_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++) {
|
|
Shinya Kitaoka |
120a6e |
magic_tone = tone * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
colbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
|
|
Shinya Kitaoka |
120a6e |
int pencil_index, int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *penbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, enot;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_enot, p_r, p_g, p_b, p_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = pencil_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (enot = info.n_tones - 1; enot >= 0; enot--) {
|
|
Shinya Kitaoka |
120a6e |
magic_enot = enot * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
penbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_ramp(RASTER * ras, TCM_INFO info, LPIXEL color,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL pencil, int color_index, int pencil_index,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied, int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *ramp;
|
|
Shinya Kitaoka |
120a6e |
int ramp_index;
|
|
Shinya Kitaoka |
120a6e |
int c_r, c_g, c_b, c_m, p_r, p_g, p_b, p_m, d_r, d_g, d_b, d_m;
|
|
Shinya Kitaoka |
120a6e |
int tone, tmax, tmax_2;
|
|
Shinya Kitaoka |
120a6e |
int tmax_2_r, tmax_2_g, tmax_2_b, tmax_2_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
ramp_index =
|
|
Shinya Kitaoka |
120a6e |
color_index << info.color_offs | pencil_index << info.pencil_offs;
|
|
Shinya Kitaoka |
120a6e |
ramp = ras->cmap.buffer + ramp_index;
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
d_r = c_r - p_r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
d_g = c_g - p_g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
d_b = c_b - p_b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
d_m = c_m - p_m;
|
|
Shinya Kitaoka |
120a6e |
tmax = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2 = tmax >> 1;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_r = d_r < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_g = d_g < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_b = d_b < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
tmax_2_m = d_m < 0 ? -tmax_2 : tmax_2;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++) {
|
|
Shinya Kitaoka |
120a6e |
val.r = p_r + (d_r * custom_tone[tone] + tmax_2_r) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.g = p_g + (d_g * custom_tone[tone] + tmax_2_g) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.b = p_b + (d_b * custom_tone[tone] + tmax_2_b) / tmax;
|
|
Shinya Kitaoka |
120a6e |
val.m = p_m + (d_m * custom_tone[tone] + tmax_2_m) / tmax;
|
|
Shinya Kitaoka |
120a6e |
ramp[tone] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_colramp(RASTER * ras, TCM_INFO info, LPIXEL color,
|
|
Shinya Kitaoka |
120a6e |
int color_index, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *colbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, tone;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_tone, c_r, c_g, c_b, c_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) color = premult_lpixel(color);
|
|
Shinya Kitaoka |
120a6e |
c_r = color.r;
|
|
Shinya Kitaoka |
120a6e |
c_g = color.g;
|
|
Shinya Kitaoka |
120a6e |
c_b = color.b;
|
|
Shinya Kitaoka |
120a6e |
c_m = color.m;
|
|
Shinya Kitaoka |
120a6e |
colbuffer = ras->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = color_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++) {
|
|
Shinya Kitaoka |
120a6e |
magic_tone = custom_tone[tone] * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((c_r * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((c_g * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((c_b * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((c_m * magic_tone + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
colbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_penramp(RASTER * ras, TCM_INFO info, LPIXEL pencil,
|
|
Shinya Kitaoka |
120a6e |
int pencil_index, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL val, *penbuffer;
|
|
Shinya Kitaoka |
120a6e |
int index, tone, maxtone;
|
|
Shinya Kitaoka |
120a6e |
UINT magic_enot, p_r, p_g, p_b, p_m;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (!already_premultiplied) pencil = premult_lpixel(pencil);
|
|
Shinya Kitaoka |
120a6e |
p_r = pencil.r;
|
|
Shinya Kitaoka |
120a6e |
p_g = pencil.g;
|
|
Shinya Kitaoka |
120a6e |
p_b = pencil.b;
|
|
Shinya Kitaoka |
120a6e |
p_m = pencil.m;
|
|
Shinya Kitaoka |
120a6e |
penbuffer = ras->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
index = pencil_index << info.tone_bits;
|
|
Shinya Kitaoka |
120a6e |
maxtone = info.n_tones - 1;
|
|
Shinya Kitaoka |
120a6e |
for (tone = 0; tone < info.n_tones; tone++) {
|
|
Shinya Kitaoka |
120a6e |
magic_enot = (maxtone - custom_tone[tone]) * MAGICFAC;
|
|
Shinya Kitaoka |
120a6e |
val.r = (UCHAR)((p_r * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.g = (UCHAR)((p_g * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.b = (UCHAR)((p_b * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
val.m = (UCHAR)((p_m * magic_enot + (1 << 23)) >> 24);
|
|
Shinya Kitaoka |
120a6e |
penbuffer[index++] = val;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * pencil, int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
int i, j;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < info.n_pencils; j++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_colramp(ras, info, color[i], i, already_premultiplied);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_penbuffer(RASTER * ras, TCM_INFO info, LPIXEL * pencil,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_pencils; i++)
|
|
Shinya Kitaoka |
120a6e |
rop_fill_cmap_penramp(ras, info, pencil[i], i, already_premultiplied);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_buffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * pencil, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
int i, j;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < info.n_pencils; j++)
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_ramp(ras, info, color[i], pencil[j], i, j,
|
|
Shinya Kitaoka |
120a6e |
already_premultiplied, custom_tone);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_custom_fill_cmap_colbuffer(RASTER * ras, TCM_INFO info, LPIXEL * color,
|
|
Shinya Kitaoka |
120a6e |
int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_colors; i++)
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_colramp(ras, info, color[i], i, already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
custom_tone);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
void rop_custom_fill_cmap_penbuffer(RASTER * ras, TCM_INFO info,
|
|
Shinya Kitaoka |
120a6e |
LPIXEL * pencil, int already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
int *custom_tone) {
|
|
Shinya Kitaoka |
120a6e |
int i;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < info.n_pencils; i++)
|
|
Shinya Kitaoka |
120a6e |
rop_custom_fill_cmap_penramp(ras, info, pencil[i], i, already_premultiplied,
|
|
Shinya Kitaoka |
120a6e |
custom_tone);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void release_raster(RASTER * raster) {
|
|
Shinya Kitaoka |
120a6e |
?D 89 if (!raster->native_buffer)
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 rop_clear_extra(raster);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!(raster->native_buffer || raster->buffer))
|
|
Shinya Kitaoka |
120a6e |
?E 89 {
|
|
Shinya Kitaoka |
120a6e |
?D 89 tmsg_error("release_raster, missing buffer");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 tmsg_error("release_raster, missing buffer");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (raster->native_buffer)
|
|
Shinya Kitaoka |
120a6e |
?I 99 {
|
|
Shinya Kitaoka |
120a6e |
?E 99 release_memory_chunk(raster->native_buffer);
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("libero %x\n", raster->native_buffer);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 99 else ?I 99 {
|
|
Shinya Kitaoka |
120a6e |
?E 99 release_memory_chunk(raster->buffer);
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("libero %x\n", raster->buffer);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 99
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 89 release_memory_chunk(raster->native_buffer);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 89 if (raster->type == RAS_CM16 && raster->cmap.buffer)
|
|
Shinya Kitaoka |
120a6e |
free(raster->cmap.buffer);
|
|
Shinya Kitaoka |
120a6e |
?D 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Shinya Kitaoka |
120a6e |
?I 89 else if (raster->type == RAS_CM24 && raster->cmap.penbuffer) {
|
|
Shinya Kitaoka |
120a6e |
free(raster->cmap.penbuffer);
|
|
Shinya Kitaoka |
120a6e |
free(raster->cmap.colbuffer);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 89 memset(raster, 0, sizeof(RASTER));
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?D 89
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
rop_clear_extra(RASTER * raster) {
|
|
Shinya Kitaoka |
120a6e |
if (raster->extra_mask && raster->type != RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
if (!(raster->native_extra || raster->extra)) {
|
|
Shinya Kitaoka |
120a6e |
tmsg_error("release_extra, missing extra buffer");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (raster->native_extra)
|
|
Shinya Kitaoka |
120a6e |
?I 99 {
|
|
Shinya Kitaoka |
120a6e |
?E 99 release_memory_chunk(raster->native_extra);
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("libero extra %x\n", raster->native_extra);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 99 else ?I 99 {
|
|
Shinya Kitaoka |
120a6e |
?E 99 release_memory_chunk(raster->extra);
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("libero extra %x\n", raster->extra);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 99
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
raster->extra_mask = 0;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_clear_patches(RASTER * raster) {
|
|
Shinya Kitaoka |
120a6e |
raster->extra_mask &= ~7;
|
|
Shinya Kitaoka |
120a6e |
if (!raster->extra_mask) rop_clear_extra(raster);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void rop_clear_extra_but_not_patches(RASTER * raster) {
|
|
Shinya Kitaoka |
120a6e |
raster->extra_mask &= 7;
|
|
Shinya Kitaoka |
120a6e |
if (!raster->extra_mask) rop_clear_extra(raster);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 89
|
|
Shinya Kitaoka |
120a6e |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89 void
|
|
Shinya Kitaoka |
120a6e |
create_raster(RASTER * raster, int xsize, int ysize, RAS_TYPE type) {
|
|
Shinya Kitaoka |
120a6e |
int pixsize;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
memset(raster, 0, sizeof(RASTER));
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
pixsize = rop_pixbytes(type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (!(raster->native_buffer = get_memory_chunk(xsize * ysize * pixsize)))
|
|
Shinya Kitaoka |
120a6e |
?D 86 tmsg_fatal("can't allocate %d Mbytes",
|
|
Shinya Kitaoka |
120a6e |
((xsize / 1024) * (ysize / 1024)) * pixsize);
|
|
Shinya Kitaoka |
120a6e |
?E 86
|
|
Toshihiro Shimizu |
890ddd |
?I 86 tmsg_fatal("can't allocate %d Mbytes",
|
|
Shinya Kitaoka |
120a6e |
(xsize * ysize * pixsize + (512 * 1024)) / (1024 * 1024));
|
|
Shinya Kitaoka |
120a6e |
?E 86
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("alloco %x: %dX%dX%d=%d bytes\n", raster->native_buffer,
|
|
Shinya Kitaoka |
120a6e |
xsize, ysize, pixsize, xsize * ysize * pixsize);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?E 99 raster->buffer = raster->native_buffer;
|
|
Shinya Kitaoka |
120a6e |
raster->type = type;
|
|
Shinya Kitaoka |
120a6e |
raster->wrap = raster->lx = xsize;
|
|
Shinya Kitaoka |
120a6e |
raster->ly = ysize;
|
|
Shinya Kitaoka |
120a6e |
?I 86 switch (type) {
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM16 : raster->cmap.info = Tcm_new_default_info;
|
|
Shinya Kitaoka |
120a6e |
CASE RAS_CM24 : raster->cmap.info = Tcm_24_default_info;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 86 return;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 89 int create_subraster(RASTER * rin, RASTER * rout, int x0, int y0, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1)
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 void
|
|
Shinya Kitaoka |
120a6e |
create_raster_with_extra(RASTER * raster, int xsize, int ysize, RAS_TYPE type,
|
|
Shinya Kitaoka |
120a6e |
UCHAR extra_mask) {
|
|
Shinya Kitaoka |
120a6e |
create_raster(raster, xsize, ysize, type);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
raster->extra_mask = extra_mask;
|
|
Shinya Kitaoka |
120a6e |
if (extra_mask && type != RAS_CM24) {
|
|
Shinya Kitaoka |
120a6e |
if (!(raster->native_extra = get_memory_chunk(xsize * ysize)))
|
|
Shinya Kitaoka |
120a6e |
tmsg_fatal("can't allocate %d Mbytes",
|
|
Shinya Kitaoka |
120a6e |
(xsize * ysize + (512 * 1024)) / (1024 * 1024));
|
|
Shinya Kitaoka |
120a6e |
?I 99 MEMORY_PRINTF("alloco extra %x: %dX%d=%d bytes\n",
|
|
Shinya Kitaoka |
120a6e |
raster->native_extra, xsize, ysize, xsize * ysize);
|
|
Shinya Kitaoka |
120a6e |
?E 99 raster->extra = raster->native_extra;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int create_subraster(RASTER * rin, RASTER * rout, int x0, int y0, int x1,
|
|
Shinya Kitaoka |
120a6e |
int y1)
|
|
Shinya Kitaoka |
120a6e |
?E 89 {
|
|
Shinya Kitaoka |
120a6e |
if (x1 < x0 || y1 < y0) return FALSE;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
*rout = *rin;
|
|
Shinya Kitaoka |
120a6e |
if (x0 < 0) x0 = 0;
|
|
Shinya Kitaoka |
120a6e |
if (y0 < 0) y0 = 0;
|
|
Shinya Kitaoka |
120a6e |
if (x1 > rin->lx - 1) x1 = rin->lx - 1;
|
|
Shinya Kitaoka |
120a6e |
if (y1 > rin->ly - 1) y1 = rin->ly - 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rout->lx = x1 - x0 + 1;
|
|
Shinya Kitaoka |
120a6e |
rout->ly = y1 - y0 + 1;
|
|
Shinya Kitaoka |
120a6e |
rout->buffer =
|
|
Shinya Kitaoka |
120a6e |
(UCHAR *)(rin->buffer) + (y0 * rin->wrap + x0) * rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
?I 89 if (rin->extra) rout->extra = rin->extra + x0 + y0 * rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
?E 89 return TRUE;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void clone_raster(RASTER * rin, RASTER * rout) {
|
|
Shinya Kitaoka |
120a6e |
?I 91 int size;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 91
|
|
Toshihiro Shimizu |
890ddd |
?D 89 create_raster(rout, rin->lx, rin->ly, rin->type);
|
|
Shinya Kitaoka |
120a6e |
?I 85
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89
|
|
Shinya Kitaoka |
120a6e |
?D 90 create_raster_with_extra(rout, rin->lx, rin->ly, rin->type,
|
|
Shinya Kitaoka |
120a6e |
rin->extra_mask);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 90
|
|
Toshihiro Shimizu |
890ddd |
?I 90
|
|
Toshihiro Shimizu |
890ddd |
?D 92 create_raster(rout, rin->lx, rin->ly, rin->type);
|
|
Shinya Kitaoka |
120a6e |
?E 92
|
|
Shinya Kitaoka |
120a6e |
?I 92 create_raster_with_extra(rout, rin->lx, rin->ly, rin->type,
|
|
Shinya Kitaoka |
120a6e |
rin->extra_mask);
|
|
Shinya Kitaoka |
120a6e |
?E 92
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?E 90
|
|
Toshihiro Shimizu |
890ddd |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?E 85 rop_copy(rin, rout, 0, 0, rin->lx - 1, rin->ly - 1, 0, 0);
|
|
Shinya Kitaoka |
120a6e |
?I 85 if (rin->type == RAS_CM16 || rin->type == RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
?I 90 {
|
|
Shinya Kitaoka |
120a6e |
?E 90 rout->cmap = rin->cmap;
|
|
Shinya Kitaoka |
120a6e |
?I 90
|
|
Toshihiro Shimizu |
890ddd |
?D 91 TCALLOC(rout->cmap.buffer, TCM_CMAP_BUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.buffer, rin->cmap.buffer,
|
|
Shinya Kitaoka |
120a6e |
TCM_CMAP_BUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_CM24)
|
|
Shinya Kitaoka |
120a6e |
?E 91
|
|
Toshihiro Shimizu |
890ddd |
?I 91
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (rin->cmap.buffer)
|
|
Shinya Kitaoka |
120a6e |
?E 91 {
|
|
Shinya Kitaoka |
120a6e |
?D 91 if (rin->cmap.penbuffer) {
|
|
Shinya Kitaoka |
120a6e |
TCALLOC(rout->cmap.penbuffer,
|
|
Shinya Kitaoka |
120a6e |
TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.penbuffer, rin->cmap.penbuffer,
|
|
Shinya Kitaoka |
120a6e |
TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->cmap.colbuffer) {
|
|
Shinya Kitaoka |
120a6e |
TCALLOC(rout->cmap.colbuffer,
|
|
Shinya Kitaoka |
120a6e |
TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.colbuffer, rin->cmap.colbuffer,
|
|
Shinya Kitaoka |
120a6e |
TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 91
|
|
Toshihiro Shimizu |
890ddd |
?I 91 size = TCM_CMAP_BUFFER_SIZE(rout->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(rout->cmap.buffer, size);
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.buffer, rin->cmap.buffer, size * sizeof(LPIXEL));
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->cmap.penbuffer) {
|
|
Shinya Kitaoka |
120a6e |
size = TCM_CMAP_PENBUFFER_SIZE(rout->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(rout->cmap.penbuffer, size);
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.penbuffer, rin->cmap.penbuffer, size * sizeof(LPIXEL));
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
size = TCM_CMAP_COLBUFFER_SIZE(rout->cmap.info);
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(rout->cmap.colbuffer, size);
|
|
Shinya Kitaoka |
120a6e |
memcpy(rout->cmap.colbuffer, rin->cmap.colbuffer, size * sizeof(LPIXEL));
|
|
Shinya Kitaoka |
120a6e |
?E 91
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 90
|
|
Toshihiro Shimizu |
890ddd |
?E 85
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
?I 87
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void
|
|
Shinya Kitaoka |
120a6e |
convert_raster(RASTER * r, RAS_TYPE type) {
|
|
Shinya Kitaoka |
120a6e |
RASTER raux;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (r->type == type) return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 89 create_raster(&raux, r->lx, r->ly, type);
|
|
Shinya Kitaoka |
120a6e |
?E 89
|
|
Toshihiro Shimizu |
890ddd |
?I 89 create_raster_with_extra(&raux, r->lx, r->ly, type, r->extra_mask);
|
|
Shinya Kitaoka |
120a6e |
?E 89 rop_copy(r, &raux, 0, 0, r->lx - 1, r->ly - 1, 0, 0);
|
|
Shinya Kitaoka |
120a6e |
release_raster(r);
|
|
Shinya Kitaoka |
120a6e |
*r = raux;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
?I 98
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/*-----------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static UCHAR Reverse_lut[256];
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void init_reverse_lut(void) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR meta_lut[] = {0x0, 0x8, 0x4, 0xc, 0x2, 0xa, 0x6, 0xe,
|
|
Shinya Kitaoka |
120a6e |
0x1, 0x9, 0x5, 0xd, 0x3, 0xb, 0x7, 0xf};
|
|
Shinya Kitaoka |
120a6e |
static int i = 0;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
if (i == 256) return;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < 256; i++)
|
|
Shinya Kitaoka |
120a6e |
Reverse_lut[i] = (meta_lut[i & 0xf] << 4) | (meta_lut[i >> 4]);
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?I 105 static void rop_mirror_v_cm16_rgbm(RASTER * rin, RASTER * rout) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, *cmap;
|
|
Shinya Kitaoka |
120a6e |
USHORT *rowin, *pixin;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
cmap = rin->cmap.buffer - rin->cmap.info.offset_mask;
|
|
Shinya Kitaoka |
120a6e |
lx = rin->lx;
|
|
Shinya Kitaoka |
120a6e |
ly = rin->ly;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (USHORT *)rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * (ly - 1);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (ly-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) *pixout++ = cmap[*pixin++];
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout -= wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
static void rop_mirror_v_cm24_rgbm(RASTER * rin, RASTER * rout) {
|
|
Shinya Kitaoka |
120a6e |
LPIXEL *rowout, *pixout, valout, *penmap, *colmap;
|
|
Shinya Kitaoka |
120a6e |
ULONG *rowin, *pixin, valin;
|
|
Shinya Kitaoka |
120a6e |
UCHAR *exrow, *expix;
|
|
Shinya Kitaoka |
120a6e |
int wrapin, wrapout;
|
|
Shinya Kitaoka |
120a6e |
int x, lx, ly, lines;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
penmap = rin->cmap.penbuffer;
|
|
Shinya Kitaoka |
120a6e |
colmap = rin->cmap.colbuffer;
|
|
Shinya Kitaoka |
120a6e |
lx = rin->lx;
|
|
Shinya Kitaoka |
120a6e |
ly = rin->ly;
|
|
Shinya Kitaoka |
120a6e |
lines = ly;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
rowin = (ULONG *)rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
rowout = (LPIXEL *)rout->buffer + wrapout * (ly - 1);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
while (lines-- > 0) {
|
|
Shinya Kitaoka |
120a6e |
pixin = rowin;
|
|
Shinya Kitaoka |
120a6e |
pixout = rowout;
|
|
Shinya Kitaoka |
120a6e |
for (x = 0; x < lx; x++) {
|
|
Shinya Kitaoka |
120a6e |
valin = *pixin++;
|
|
Shinya Kitaoka |
120a6e |
MAP24(valin, penmap, colmap, valout)
|
|
Shinya Kitaoka |
120a6e |
*pixout++ = valout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
rowin += wrapin;
|
|
Shinya Kitaoka |
120a6e |
rowout -= wrapout;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 105 void rop_mirror(RASTER * rin, RASTER * rout, TBOOL is_vertical) {
|
|
Shinya Kitaoka |
120a6e |
UCHAR *buffer1, *buffer2, *auxbuf;
|
|
Shinya Kitaoka |
120a6e |
int bpp, lx, ly, wrapin, wrapout, scanline_in, scanline_out, lx_size;
|
|
Shinya Kitaoka |
120a6e |
int i, j;
|
|
Shinya Kitaoka |
120a6e |
lx = rin->lx;
|
|
Shinya Kitaoka |
120a6e |
ly = rin->ly;
|
|
Shinya Kitaoka |
120a6e |
wrapin = rin->wrap;
|
|
Shinya Kitaoka |
120a6e |
wrapout = rout->wrap;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
?I 105 if (rin->type == RAS_CM16 && rout->type == RAS_RGBM && is_vertical) {
|
|
Shinya Kitaoka |
120a6e |
rop_mirror_v_cm16_rgbm(rin, rout);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_CM24 && rout->type == RAS_RGBM && is_vertical) {
|
|
Shinya Kitaoka |
120a6e |
rop_mirror_v_cm24_rgbm(rin, rout);
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?E 105 assert(rin->type == rout->type);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
bpp = rop_pixbytes(rin->type);
|
|
Shinya Kitaoka |
120a6e |
scanline_in = wrapin * bpp;
|
|
Shinya Kitaoka |
120a6e |
scanline_out = wrapout * bpp;
|
|
Shinya Kitaoka |
120a6e |
lx_size = lx * bpp;
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
?D 100 if (rin->type == RAS_BW)
|
|
Toshihiro Shimizu |
890ddd |
?E 100
|
|
Shinya Kitaoka |
120a6e |
?I 100 if ((rin->type == RAS_BW) || (rin->type == RAS_WB))
|
|
Shinya Kitaoka |
120a6e |
?E 100 {
|
|
Shinya Kitaoka |
120a6e |
lx_size = (lx_size + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
scanline_in = (scanline_in + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
scanline_out = (scanline_out + 7) / 8;
|
|
Shinya Kitaoka |
120a6e |
if (!is_vertical) init_reverse_lut();
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
buffer1 = rin->buffer;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
if (is_vertical)
|
|
Shinya Kitaoka |
120a6e |
?D 105 {
|
|
Shinya Kitaoka |
120a6e |
?E 105
|
|
Shinya Kitaoka |
120a6e |
?I 105 {
|
|
Shinya Kitaoka |
120a6e |
?E 105 buffer2 = (UCHAR *)rout->buffer + (ly - 1) * scanline_out;
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(auxbuf, lx_size)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ly / 2; i++) {
|
|
Shinya Kitaoka |
120a6e |
memcpy(auxbuf, buffer1, lx_size);
|
|
Shinya Kitaoka |
120a6e |
memcpy(buffer1, buffer2, lx_size);
|
|
Shinya Kitaoka |
120a6e |
memcpy(buffer2, auxbuf, lx_size);
|
|
Shinya Kitaoka |
120a6e |
buffer1 += scanline_in;
|
|
Shinya Kitaoka |
120a6e |
buffer2 -= scanline_out;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
else {
|
|
Shinya Kitaoka |
120a6e |
buffer2 = (UCHAR *)rout->buffer + lx_size;
|
|
Shinya Kitaoka |
120a6e |
TMALLOC(auxbuf, bpp)
|
|
Shinya Kitaoka |
120a6e |
for (i = 0; i < ly; i++) {
|
|
Shinya Kitaoka |
120a6e |
for (j = 0; j < lx_size / 2; j += bpp) {
|
|
Shinya Kitaoka |
120a6e |
memcpy(auxbuf, buffer1 + j, bpp);
|
|
Shinya Kitaoka |
120a6e |
memcpy(buffer1 + j, buffer1 + lx_size - j - bpp, bpp);
|
|
Shinya Kitaoka |
120a6e |
memcpy(buffer2 - j - bpp, auxbuf, bpp);
|
|
Shinya Kitaoka |
120a6e |
if (rin->type == RAS_BW) {
|
|
Shinya Kitaoka |
120a6e |
buffer1[lx_size - j - bpp] =
|
|
Shinya Kitaoka |
120a6e |
Reverse_lut[buffer1[lx_size - j - bpp]];
|
|
Shinya Kitaoka |
120a6e |
buffer1[j] = Reverse_lut[buffer1[j]];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?I 102 else if (rin->type == RAS_WB) {
|
|
Shinya Kitaoka |
120a6e |
buffer1[lx_size - j - bpp] =
|
|
Shinya Kitaoka |
120a6e |
~Reverse_lut[buffer1[lx_size - j - bpp]];
|
|
Shinya Kitaoka |
120a6e |
buffer1[j] = ~Reverse_lut[buffer1[j]];
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 102
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
buffer1 += scanline_in;
|
|
Shinya Kitaoka |
120a6e |
buffer2 += scanline_out;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
free(auxbuf);
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
?E 98
|
|
Toshihiro Shimizu |
890ddd |
?E 87
|
|
Toshihiro Shimizu |
890ddd |
?E 84
|