| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../../include/fxge/fx_ge.h" | 7 #include "../../../include/fxge/fx_ge.h" |
| 8 #include "../../../include/fxcodec/fx_codec.h" | 8 #include "../../../include/fxcodec/fx_codec.h" |
| 9 #include "dib_int.h" | 9 #include "dib_int.h" |
| 10 const FX_BYTE g_GammaRamp[256] = { | 10 const uint8_t g_GammaRamp[256] = { |
| 11 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
, | 11 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
, |
| 12 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3
, | 12 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3
, |
| 13 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7
, | 13 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7
, |
| 14 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13
, | 14 8, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 12, 12, 12, 13
, |
| 15 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 18, 19, 19, 2
0, | 15 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 17, 18, 18, 19, 19, 2
0, |
| 16 20, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 2
9, | 16 20, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 27, 27, 28, 29, 2
9, |
| 17 30, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 4
1, | 17 30, 30, 31, 32, 32, 33, 34, 35, 35, 36, 37, 37, 38, 39, 40, 4
1, |
| 18 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 51, 52, 53, 5
4, | 18 41, 42, 43, 44, 45, 45, 46, 47, 48, 49, 50, 51, 51, 52, 53, 5
4, |
| 19 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 7
0, | 19 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 7
0, |
| 20 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 8
8, | 20 71, 72, 73, 74, 76, 77, 78, 79, 80, 81, 82, 84, 85, 86, 87, 8
8, |
| 21 90, 91, 92, 93, 95, 96, 97, 99, 100, 101, 103, 104, 105, 107, 108, 10
9, | 21 90, 91, 92, 93, 95, 96, 97, 99, 100, 101, 103, 104, 105, 107, 108, 10
9, |
| 22 111, 112, 114, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 130, 131, 1
33, | 22 111, 112, 114, 115, 116, 118, 119, 121, 122, 124, 125, 127, 128, 130, 131, 1
33, |
| 23 134, 136, 138, 139, 141, 142, 144, 146, 147, 149, 151, 152, 154, 156, 157, 1
59, | 23 134, 136, 138, 139, 141, 142, 144, 146, 147, 149, 151, 152, 154, 156, 157, 1
59, |
| 24 161, 163, 164, 166, 168, 170, 171, 173, 175, 177, 179, 181, 183, 184, 186, 1
88, | 24 161, 163, 164, 166, 168, 170, 171, 173, 175, 177, 179, 181, 183, 184, 186, 1
88, |
| 25 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 2
20, | 25 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 2
20, |
| 26 222, 224, 226, 229, 231, 233, 235, 237, 239, 242, 244, 246, 248, 250, 253, 2
55, | 26 222, 224, 226, 229, 231, 233, 235, 237, 239, 242, 244, 246, 248, 250, 253, 2
55, |
| 27 }; | 27 }; |
| 28 const FX_BYTE g_GammaInverse[256] = { | 28 const uint8_t g_GammaInverse[256] = { |
| 29 0, 13, 22, 28, 34, 38, 42, 46, 50, 53, 56, 59, 61, 64, 66, 69
, | 29 0, 13, 22, 28, 34, 38, 42, 46, 50, 53, 56, 59, 61, 64, 66, 69
, |
| 30 71, 73, 75, 77, 79, 81, 83, 85, 86, 88, 90, 92, 93, 95, 96, 9
8, | 30 71, 73, 75, 77, 79, 81, 83, 85, 86, 88, 90, 92, 93, 95, 96, 9
8, |
| 31 99, 101, 102, 104, 105, 106, 108, 109, 110, 112, 113, 114, 115, 117, 118, 11
9, | 31 99, 101, 102, 104, 105, 106, 108, 109, 110, 112, 113, 114, 115, 117, 118, 11
9, |
| 32 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 1
36, | 32 120, 121, 122, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 1
36, |
| 33 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 1
51, | 33 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 1
51, |
| 34 152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162, 163, 163, 1
64, | 34 152, 153, 154, 155, 155, 156, 157, 158, 159, 159, 160, 161, 162, 163, 163, 1
64, |
| 35 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 175, 1
76, | 35 165, 166, 167, 167, 168, 169, 170, 170, 171, 172, 173, 173, 174, 175, 175, 1
76, |
| 36 177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184, 185, 185, 186, 187, 1
87, | 36 177, 178, 178, 179, 180, 180, 181, 182, 182, 183, 184, 185, 185, 186, 187, 1
87, |
| 37 188, 189, 189, 190, 190, 191, 192, 192, 193, 194, 194, 195, 196, 196, 197, 1
97, | 37 188, 189, 189, 190, 190, 191, 192, 192, 193, 194, 194, 195, 196, 196, 197, 1
97, |
| 38 198, 199, 199, 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, 206, 206, 2
07, | 38 198, 199, 199, 200, 200, 201, 202, 202, 203, 203, 204, 205, 205, 206, 206, 2
07, |
| 39 208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 215, 2
16, | 39 208, 208, 209, 209, 210, 210, 211, 212, 212, 213, 213, 214, 214, 215, 215, 2
16, |
| 40 216, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 2
24, | 40 216, 217, 218, 218, 219, 219, 220, 220, 221, 221, 222, 222, 223, 223, 224, 2
24, |
| 41 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 2
33, | 41 225, 226, 226, 227, 227, 228, 228, 229, 229, 230, 230, 231, 231, 232, 232, 2
33, |
| 42 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 2
40, | 42 233, 234, 234, 235, 235, 236, 236, 237, 237, 238, 238, 238, 239, 239, 240, 2
40, |
| 43 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 2
48, | 43 241, 241, 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, 246, 247, 247, 2
48, |
| 44 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 2
55, | 44 248, 249, 249, 250, 250, 251, 251, 251, 252, 252, 253, 253, 254, 254, 255, 2
55, |
| 45 }; | 45 }; |
| 46 const FX_BYTE _color_sqrt[256] = { | 46 const uint8_t _color_sqrt[256] = { |
| 47 0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26, 0x29
, 0x2C, 0x2F, 0x32, | 47 0x00, 0x03, 0x07, 0x0B, 0x0F, 0x12, 0x16, 0x19, 0x1D, 0x20, 0x23, 0x26, 0x29
, 0x2C, 0x2F, 0x32, |
| 48 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50
, 0x52, 0x54, 0x56, | 48 0x35, 0x37, 0x3A, 0x3C, 0x3F, 0x41, 0x43, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50
, 0x52, 0x54, 0x56, |
| 49 0x57, 0x59, 0x5B, 0x5C, 0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69
, 0x6B, 0x6C, 0x6D, | 49 0x57, 0x59, 0x5B, 0x5C, 0x5E, 0x60, 0x61, 0x63, 0x64, 0x65, 0x67, 0x68, 0x69
, 0x6B, 0x6C, 0x6D, |
| 50 0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B
, 0x7C, 0x7D, 0x7E, | 50 0x6E, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B
, 0x7C, 0x7D, 0x7E, |
| 51 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x87, 0x88, 0x89, 0x8A, 0x8B
, 0x8C, 0x8D, 0x8E, | 51 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x87, 0x88, 0x89, 0x8A, 0x8B
, 0x8C, 0x8D, 0x8E, |
| 52 0x8F, 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99
, 0x9A, 0x9B, 0x9C, | 52 0x8F, 0x90, 0x91, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x97, 0x98, 0x99
, 0x9A, 0x9B, 0x9C, |
| 53 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5, 0xA6
, 0xA7, 0xA7, 0xA8, | 53 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA4, 0xA5, 0xA6
, 0xA7, 0xA7, 0xA8, |
| 54 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1, 0xB2
, 0xB3, 0xB3, 0xB4, | 54 0xA9, 0xAA, 0xAA, 0xAB, 0xAC, 0xAD, 0xAD, 0xAE, 0xAF, 0xB0, 0xB0, 0xB1, 0xB2
, 0xB3, 0xB3, 0xB4, |
| 55 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD
, 0xBE, 0xBE, 0xBF, | 55 0xB5, 0xB5, 0xB6, 0xB7, 0xB7, 0xB8, 0xB9, 0xBA, 0xBA, 0xBB, 0xBC, 0xBC, 0xBD
, 0xBE, 0xBE, 0xBF, |
| 56 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7, 0xC7
, 0xC8, 0xC9, 0xC9, | 56 0xC0, 0xC0, 0xC1, 0xC2, 0xC2, 0xC3, 0xC4, 0xC4, 0xC5, 0xC6, 0xC6, 0xC7, 0xC7
, 0xC8, 0xC9, 0xC9, |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 mid = &color.green; | 220 mid = &color.green; |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 if (*max > *min) { | 223 if (*max > *min) { |
| 224 *mid = (*mid - *min) * s / (*max - *min); | 224 *mid = (*mid - *min) * s / (*max - *min); |
| 225 *max = s; | 225 *max = s; |
| 226 *min = 0; | 226 *min = 0; |
| 227 } | 227 } |
| 228 return color; | 228 return color; |
| 229 } | 229 } |
| 230 void _RGB_Blend(int blend_mode, FX_LPCBYTE src_scan, FX_BYTE* dest_scan, int res
ults[3]) | 230 void _RGB_Blend(int blend_mode, FX_LPCBYTE src_scan, uint8_t* dest_scan, int res
ults[3]) |
| 231 { | 231 { |
| 232 _RGB src, back, result; | 232 _RGB src, back, result; |
| 233 src.red = src_scan[2]; | 233 src.red = src_scan[2]; |
| 234 src.green = src_scan[1]; | 234 src.green = src_scan[1]; |
| 235 src.blue = src_scan[0]; | 235 src.blue = src_scan[0]; |
| 236 back.red = dest_scan[2]; | 236 back.red = dest_scan[2]; |
| 237 back.green = dest_scan[1]; | 237 back.green = dest_scan[1]; |
| 238 back.blue = dest_scan[0]; | 238 back.blue = dest_scan[0]; |
| 239 switch (blend_mode) { | 239 switch (blend_mode) { |
| 240 case FXDIB_BLEND_HUE: | 240 case FXDIB_BLEND_HUE: |
| (...skipping 14 matching lines...) Expand all Loading... |
| 255 results[2] = result.red; | 255 results[2] = result.red; |
| 256 } | 256 } |
| 257 inline void _CompositeRow_Argb2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, in
t pixel_count, FX_LPCBYTE clip_scan) | 257 inline void _CompositeRow_Argb2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, in
t pixel_count, FX_LPCBYTE clip_scan) |
| 258 { | 258 { |
| 259 src_scan += 3; | 259 src_scan += 3; |
| 260 for (int col = 0; col < pixel_count; col ++) { | 260 for (int col = 0; col < pixel_count; col ++) { |
| 261 int src_alpha = *src_scan; | 261 int src_alpha = *src_scan; |
| 262 if (clip_scan) { | 262 if (clip_scan) { |
| 263 src_alpha = clip_scan[col] * src_alpha / 255; | 263 src_alpha = clip_scan[col] * src_alpha / 255; |
| 264 } | 264 } |
| 265 FX_BYTE back_alpha = *dest_scan; | 265 uint8_t back_alpha = *dest_scan; |
| 266 if (!back_alpha) { | 266 if (!back_alpha) { |
| 267 *dest_scan = src_alpha; | 267 *dest_scan = src_alpha; |
| 268 } else if (src_alpha) { | 268 } else if (src_alpha) { |
| 269 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 269 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 270 } | 270 } |
| 271 dest_scan ++; | 271 dest_scan ++; |
| 272 src_scan += 4; | 272 src_scan += 4; |
| 273 } | 273 } |
| 274 } | 274 } |
| 275 void _CompositeRow_Rgba2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_alpha_scan, int
pixel_count, FX_LPCBYTE clip_scan) | 275 void _CompositeRow_Rgba2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_alpha_scan, int
pixel_count, FX_LPCBYTE clip_scan) |
| 276 { | 276 { |
| 277 for (int col = 0; col < pixel_count; col ++) { | 277 for (int col = 0; col < pixel_count; col ++) { |
| 278 int src_alpha = *src_alpha_scan++; | 278 int src_alpha = *src_alpha_scan++; |
| 279 if (clip_scan) { | 279 if (clip_scan) { |
| 280 src_alpha = clip_scan[col] * src_alpha / 255; | 280 src_alpha = clip_scan[col] * src_alpha / 255; |
| 281 } | 281 } |
| 282 FX_BYTE back_alpha = *dest_scan; | 282 uint8_t back_alpha = *dest_scan; |
| 283 if (!back_alpha) { | 283 if (!back_alpha) { |
| 284 *dest_scan = src_alpha; | 284 *dest_scan = src_alpha; |
| 285 } else if (src_alpha) { | 285 } else if (src_alpha) { |
| 286 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 286 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 287 } | 287 } |
| 288 dest_scan ++; | 288 dest_scan ++; |
| 289 } | 289 } |
| 290 } | 290 } |
| 291 void _CompositeRow_Rgb2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width,
FX_LPCBYTE clip_scan) | 291 void _CompositeRow_Rgb2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int width,
FX_LPCBYTE clip_scan) |
| 292 { | 292 { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 305 { | 305 { |
| 306 ICodec_IccModule* pIccModule = NULL; | 306 ICodec_IccModule* pIccModule = NULL; |
| 307 if (pIccTransform) { | 307 if (pIccTransform) { |
| 308 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 308 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 309 } | 309 } |
| 310 if (blend_type) { | 310 if (blend_type) { |
| 311 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 311 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 312 int blended_color; | 312 int blended_color; |
| 313 if (src_alpha_scan) { | 313 if (src_alpha_scan) { |
| 314 for (int col = 0; col < pixel_count; col ++) { | 314 for (int col = 0; col < pixel_count; col ++) { |
| 315 FX_BYTE back_alpha = *dst_alpha_scan; | 315 uint8_t back_alpha = *dst_alpha_scan; |
| 316 if (back_alpha == 0) { | 316 if (back_alpha == 0) { |
| 317 int src_alpha = *src_alpha_scan++; | 317 int src_alpha = *src_alpha_scan++; |
| 318 if (clip_scan) { | 318 if (clip_scan) { |
| 319 src_alpha = clip_scan[col] * src_alpha / 255; | 319 src_alpha = clip_scan[col] * src_alpha / 255; |
| 320 } | 320 } |
| 321 if (src_alpha) { | 321 if (src_alpha) { |
| 322 if (pIccTransform) { | 322 if (pIccTransform) { |
| 323 pIccModule->TranslateScanline(pIccTransform, dest_sc
an, src_scan, 1); | 323 pIccModule->TranslateScanline(pIccTransform, dest_sc
an, src_scan, 1); |
| 324 } else { | 324 } else { |
| 325 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *
src_scan); | 325 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *
src_scan); |
| 326 } | 326 } |
| 327 *dst_alpha_scan = src_alpha; | 327 *dst_alpha_scan = src_alpha; |
| 328 } | 328 } |
| 329 dest_scan ++; | 329 dest_scan ++; |
| 330 dst_alpha_scan ++; | 330 dst_alpha_scan ++; |
| 331 src_scan += 3; | 331 src_scan += 3; |
| 332 continue; | 332 continue; |
| 333 } | 333 } |
| 334 FX_BYTE src_alpha = *src_alpha_scan++; | 334 uint8_t src_alpha = *src_alpha_scan++; |
| 335 if (clip_scan) { | 335 if (clip_scan) { |
| 336 src_alpha = clip_scan[col] * src_alpha / 255; | 336 src_alpha = clip_scan[col] * src_alpha / 255; |
| 337 } | 337 } |
| 338 if (src_alpha == 0) { | 338 if (src_alpha == 0) { |
| 339 dest_scan ++; | 339 dest_scan ++; |
| 340 dst_alpha_scan ++; | 340 dst_alpha_scan ++; |
| 341 src_scan += 3; | 341 src_scan += 3; |
| 342 continue; | 342 continue; |
| 343 } | 343 } |
| 344 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 344 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 345 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 345 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 346 FX_BYTE gray; | 346 uint8_t gray; |
| 347 if (pIccTransform) { | 347 if (pIccTransform) { |
| 348 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan
, 1); | 348 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan
, 1); |
| 349 } else { | 349 } else { |
| 350 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 350 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 351 } | 351 } |
| 352 if (bNonseparableBlend) { | 352 if (bNonseparableBlend) { |
| 353 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; | 353 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; |
| 354 } | 354 } |
| 355 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); | 355 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); |
| 356 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 356 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 357 dest_scan ++; | 357 dest_scan ++; |
| 358 dst_alpha_scan++; | 358 dst_alpha_scan++; |
| 359 src_scan += 3; | 359 src_scan += 3; |
| 360 } | 360 } |
| 361 } else | 361 } else |
| 362 for (int col = 0; col < pixel_count; col ++) { | 362 for (int col = 0; col < pixel_count; col ++) { |
| 363 FX_BYTE back_alpha = *dst_alpha_scan; | 363 uint8_t back_alpha = *dst_alpha_scan; |
| 364 if (back_alpha == 0) { | 364 if (back_alpha == 0) { |
| 365 int src_alpha = src_scan[3]; | 365 int src_alpha = src_scan[3]; |
| 366 if (clip_scan) { | 366 if (clip_scan) { |
| 367 src_alpha = clip_scan[col] * src_alpha / 255; | 367 src_alpha = clip_scan[col] * src_alpha / 255; |
| 368 } | 368 } |
| 369 if (src_alpha) { | 369 if (src_alpha) { |
| 370 if (pIccTransform) { | 370 if (pIccTransform) { |
| 371 pIccModule->TranslateScanline(pIccTransform, dest_sc
an, src_scan, 1); | 371 pIccModule->TranslateScanline(pIccTransform, dest_sc
an, src_scan, 1); |
| 372 } else { | 372 } else { |
| 373 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *
src_scan); | 373 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *
src_scan); |
| 374 } | 374 } |
| 375 *dst_alpha_scan = src_alpha; | 375 *dst_alpha_scan = src_alpha; |
| 376 } | 376 } |
| 377 dest_scan ++; | 377 dest_scan ++; |
| 378 dst_alpha_scan ++; | 378 dst_alpha_scan ++; |
| 379 src_scan += 4; | 379 src_scan += 4; |
| 380 continue; | 380 continue; |
| 381 } | 381 } |
| 382 FX_BYTE src_alpha = src_scan[3]; | 382 uint8_t src_alpha = src_scan[3]; |
| 383 if (clip_scan) { | 383 if (clip_scan) { |
| 384 src_alpha = clip_scan[col] * src_alpha / 255; | 384 src_alpha = clip_scan[col] * src_alpha / 255; |
| 385 } | 385 } |
| 386 if (src_alpha == 0) { | 386 if (src_alpha == 0) { |
| 387 dest_scan ++; | 387 dest_scan ++; |
| 388 dst_alpha_scan ++; | 388 dst_alpha_scan ++; |
| 389 src_scan += 4; | 389 src_scan += 4; |
| 390 continue; | 390 continue; |
| 391 } | 391 } |
| 392 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 392 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 393 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 393 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 394 FX_BYTE gray; | 394 uint8_t gray; |
| 395 if (pIccTransform) { | 395 if (pIccTransform) { |
| 396 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan
, 1); | 396 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan
, 1); |
| 397 } else { | 397 } else { |
| 398 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 398 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 399 } | 399 } |
| 400 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 400 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 401 dest_scan ++; | 401 dest_scan ++; |
| 402 dst_alpha_scan++; | 402 dst_alpha_scan++; |
| 403 src_scan += 4; | 403 src_scan += 4; |
| 404 } | 404 } |
| 405 return; | 405 return; |
| 406 } | 406 } |
| 407 if (src_alpha_scan) { | 407 if (src_alpha_scan) { |
| 408 for (int col = 0; col < pixel_count; col ++) { | 408 for (int col = 0; col < pixel_count; col ++) { |
| 409 FX_BYTE back_alpha = *dst_alpha_scan; | 409 uint8_t back_alpha = *dst_alpha_scan; |
| 410 if (back_alpha == 0) { | 410 if (back_alpha == 0) { |
| 411 int src_alpha = *src_alpha_scan++; | 411 int src_alpha = *src_alpha_scan++; |
| 412 if (clip_scan) { | 412 if (clip_scan) { |
| 413 src_alpha = clip_scan[col] * src_alpha / 255; | 413 src_alpha = clip_scan[col] * src_alpha / 255; |
| 414 } | 414 } |
| 415 if (src_alpha) { | 415 if (src_alpha) { |
| 416 if (pIccTransform) { | 416 if (pIccTransform) { |
| 417 pIccModule->TranslateScanline(pIccTransform, dest_scan,
src_scan, 1); | 417 pIccModule->TranslateScanline(pIccTransform, dest_scan,
src_scan, 1); |
| 418 } else { | 418 } else { |
| 419 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_
scan); | 419 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_
scan); |
| 420 } | 420 } |
| 421 *dst_alpha_scan = src_alpha; | 421 *dst_alpha_scan = src_alpha; |
| 422 } | 422 } |
| 423 dest_scan ++; | 423 dest_scan ++; |
| 424 dst_alpha_scan ++; | 424 dst_alpha_scan ++; |
| 425 src_scan += 3; | 425 src_scan += 3; |
| 426 continue; | 426 continue; |
| 427 } | 427 } |
| 428 FX_BYTE src_alpha = *src_alpha_scan++; | 428 uint8_t src_alpha = *src_alpha_scan++; |
| 429 if (clip_scan) { | 429 if (clip_scan) { |
| 430 src_alpha = clip_scan[col] * src_alpha / 255; | 430 src_alpha = clip_scan[col] * src_alpha / 255; |
| 431 } | 431 } |
| 432 if (src_alpha == 0) { | 432 if (src_alpha == 0) { |
| 433 dest_scan ++; | 433 dest_scan ++; |
| 434 dst_alpha_scan ++; | 434 dst_alpha_scan ++; |
| 435 src_scan += 3; | 435 src_scan += 3; |
| 436 continue; | 436 continue; |
| 437 } | 437 } |
| 438 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 438 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 439 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 439 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 440 FX_BYTE gray; | 440 uint8_t gray; |
| 441 if (pIccTransform) { | 441 if (pIccTransform) { |
| 442 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; | 442 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; |
| 443 } else { | 443 } else { |
| 444 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 444 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 445 } | 445 } |
| 446 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 446 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 447 dest_scan ++; | 447 dest_scan ++; |
| 448 dst_alpha_scan++; | 448 dst_alpha_scan++; |
| 449 src_scan += 3; | 449 src_scan += 3; |
| 450 } | 450 } |
| 451 } else | 451 } else |
| 452 for (int col = 0; col < pixel_count; col ++) { | 452 for (int col = 0; col < pixel_count; col ++) { |
| 453 FX_BYTE back_alpha = *dst_alpha_scan; | 453 uint8_t back_alpha = *dst_alpha_scan; |
| 454 if (back_alpha == 0) { | 454 if (back_alpha == 0) { |
| 455 int src_alpha = src_scan[3]; | 455 int src_alpha = src_scan[3]; |
| 456 if (clip_scan) { | 456 if (clip_scan) { |
| 457 src_alpha = clip_scan[col] * src_alpha / 255; | 457 src_alpha = clip_scan[col] * src_alpha / 255; |
| 458 } | 458 } |
| 459 if (src_alpha) { | 459 if (src_alpha) { |
| 460 if (pIccTransform) { | 460 if (pIccTransform) { |
| 461 pIccModule->TranslateScanline(pIccTransform, dest_scan,
src_scan, 1); | 461 pIccModule->TranslateScanline(pIccTransform, dest_scan,
src_scan, 1); |
| 462 } else { | 462 } else { |
| 463 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_
scan); | 463 *dest_scan = FXRGB2GRAY(src_scan[2], src_scan[1], *src_
scan); |
| 464 } | 464 } |
| 465 *dst_alpha_scan = src_alpha; | 465 *dst_alpha_scan = src_alpha; |
| 466 } | 466 } |
| 467 dest_scan ++; | 467 dest_scan ++; |
| 468 dst_alpha_scan ++; | 468 dst_alpha_scan ++; |
| 469 src_scan += 4; | 469 src_scan += 4; |
| 470 continue; | 470 continue; |
| 471 } | 471 } |
| 472 FX_BYTE src_alpha = src_scan[3]; | 472 uint8_t src_alpha = src_scan[3]; |
| 473 if (clip_scan) { | 473 if (clip_scan) { |
| 474 src_alpha = clip_scan[col] * src_alpha / 255; | 474 src_alpha = clip_scan[col] * src_alpha / 255; |
| 475 } | 475 } |
| 476 if (src_alpha == 0) { | 476 if (src_alpha == 0) { |
| 477 dest_scan ++; | 477 dest_scan ++; |
| 478 dst_alpha_scan ++; | 478 dst_alpha_scan ++; |
| 479 src_scan += 4; | 479 src_scan += 4; |
| 480 continue; | 480 continue; |
| 481 } | 481 } |
| 482 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); | 482 *dst_alpha_scan = FXDIB_ALPHA_UNION(back_alpha, src_alpha); |
| 483 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); | 483 int alpha_ratio = src_alpha * 255 / (*dst_alpha_scan); |
| 484 FX_BYTE gray; | 484 uint8_t gray; |
| 485 if (pIccTransform) { | 485 if (pIccTransform) { |
| 486 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; | 486 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; |
| 487 } else { | 487 } else { |
| 488 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 488 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 489 } | 489 } |
| 490 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 490 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 491 dest_scan ++; | 491 dest_scan ++; |
| 492 dst_alpha_scan++; | 492 dst_alpha_scan++; |
| 493 src_scan += 4; | 493 src_scan += 4; |
| 494 } | 494 } |
| 495 } | 495 } |
| 496 inline void _CompositeRow_Argb2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, in
t pixel_count, | 496 inline void _CompositeRow_Argb2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, in
t pixel_count, |
| 497 int blend_type, FX_LPCBYTE clip_scan, | 497 int blend_type, FX_LPCBYTE clip_scan, |
| 498 FX_LPCBYTE src_alpha_scan, void* pIccTransfo
rm) | 498 FX_LPCBYTE src_alpha_scan, void* pIccTransfo
rm) |
| 499 { | 499 { |
| 500 ICodec_IccModule* pIccModule = NULL; | 500 ICodec_IccModule* pIccModule = NULL; |
| 501 FX_BYTE gray; | 501 uint8_t gray; |
| 502 if (pIccTransform) { | 502 if (pIccTransform) { |
| 503 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 503 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 504 } | 504 } |
| 505 if (blend_type) { | 505 if (blend_type) { |
| 506 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 506 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 507 int blended_color; | 507 int blended_color; |
| 508 if (src_alpha_scan) { | 508 if (src_alpha_scan) { |
| 509 for (int col = 0; col < pixel_count; col ++) { | 509 for (int col = 0; col < pixel_count; col ++) { |
| 510 int src_alpha = *src_alpha_scan++; | 510 int src_alpha = *src_alpha_scan++; |
| 511 if (clip_scan) { | 511 if (clip_scan) { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 } | 582 } |
| 583 dest_scan ++; | 583 dest_scan ++; |
| 584 src_scan += 4; | 584 src_scan += 4; |
| 585 } | 585 } |
| 586 } | 586 } |
| 587 inline void _CompositeRow_Rgb2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
src_Bpp, int pixel_count, | 587 inline void _CompositeRow_Rgb2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
src_Bpp, int pixel_count, |
| 588 int blend_type, FX_LPCBYTE clip_scan, | 588 int blend_type, FX_LPCBYTE clip_scan, |
| 589 void* pIccTransform) | 589 void* pIccTransform) |
| 590 { | 590 { |
| 591 ICodec_IccModule* pIccModule = NULL; | 591 ICodec_IccModule* pIccModule = NULL; |
| 592 FX_BYTE gray; | 592 uint8_t gray; |
| 593 if (pIccTransform) { | 593 if (pIccTransform) { |
| 594 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 594 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 595 } | 595 } |
| 596 if (blend_type) { | 596 if (blend_type) { |
| 597 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 597 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 598 int blended_color; | 598 int blended_color; |
| 599 for (int col = 0; col < pixel_count; col ++) { | 599 for (int col = 0; col < pixel_count; col ++) { |
| 600 if (pIccTransform) { | 600 if (pIccTransform) { |
| 601 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; | 601 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; |
| 602 } else { | 602 } else { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 658 int src_alpha = 255; | 658 int src_alpha = 255; |
| 659 if (clip_scan) { | 659 if (clip_scan) { |
| 660 src_alpha = clip_scan[col]; | 660 src_alpha = clip_scan[col]; |
| 661 } | 661 } |
| 662 if (src_alpha == 0) { | 662 if (src_alpha == 0) { |
| 663 dest_scan ++; | 663 dest_scan ++; |
| 664 dest_alpha_scan ++; | 664 dest_alpha_scan ++; |
| 665 src_scan += src_Bpp; | 665 src_scan += src_Bpp; |
| 666 continue; | 666 continue; |
| 667 } | 667 } |
| 668 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 668 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 669 *dest_alpha_scan++ = dest_alpha; | 669 *dest_alpha_scan++ = dest_alpha; |
| 670 int alpha_ratio = src_alpha * 255 / dest_alpha; | 670 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 671 FX_BYTE gray; | 671 uint8_t gray; |
| 672 if (pIccTransform) { | 672 if (pIccTransform) { |
| 673 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; | 673 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1)
; |
| 674 } else { | 674 } else { |
| 675 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 675 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 676 } | 676 } |
| 677 if (bNonseparableBlend) { | 677 if (bNonseparableBlend) { |
| 678 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; | 678 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; |
| 679 } | 679 } |
| 680 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); | 680 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); |
| 681 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 681 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 700 src_scan += src_Bpp; | 700 src_scan += src_Bpp; |
| 701 continue; | 701 continue; |
| 702 } | 702 } |
| 703 if (src_alpha == 0) { | 703 if (src_alpha == 0) { |
| 704 dest_scan ++; | 704 dest_scan ++; |
| 705 dest_alpha_scan ++; | 705 dest_alpha_scan ++; |
| 706 src_scan += src_Bpp; | 706 src_scan += src_Bpp; |
| 707 continue; | 707 continue; |
| 708 } | 708 } |
| 709 int back_alpha = *dest_alpha_scan; | 709 int back_alpha = *dest_alpha_scan; |
| 710 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 710 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 711 *dest_alpha_scan++ = dest_alpha; | 711 *dest_alpha_scan++ = dest_alpha; |
| 712 int alpha_ratio = src_alpha * 255 / dest_alpha; | 712 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 713 FX_BYTE gray; | 713 uint8_t gray; |
| 714 if (pIccTransform) { | 714 if (pIccTransform) { |
| 715 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); | 715 pIccModule->TranslateScanline(pIccTransform, &gray, src_scan, 1); |
| 716 } else { | 716 } else { |
| 717 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); | 717 gray = FXRGB2GRAY(src_scan[2], src_scan[1], *src_scan); |
| 718 } | 718 } |
| 719 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 719 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 720 dest_scan ++; | 720 dest_scan ++; |
| 721 src_scan += src_Bpp; | 721 src_scan += src_Bpp; |
| 722 } | 722 } |
| 723 } | 723 } |
| 724 void _CompositeRow_Argb2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int pixel
_count, int blend_type, FX_LPCBYTE clip_scan, | 724 void _CompositeRow_Argb2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int pixel
_count, int blend_type, FX_LPCBYTE clip_scan, |
| 725 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE src_alpha_sca
n) | 725 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE src_alpha_sca
n) |
| 726 { | 726 { |
| 727 int blended_colors[3]; | 727 int blended_colors[3]; |
| 728 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 728 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 729 if (dest_alpha_scan == NULL) { | 729 if (dest_alpha_scan == NULL) { |
| 730 if (src_alpha_scan == NULL) { | 730 if (src_alpha_scan == NULL) { |
| 731 FX_BYTE back_alpha = 0; | 731 uint8_t back_alpha = 0; |
| 732 for (int col = 0; col < pixel_count; col ++) { | 732 for (int col = 0; col < pixel_count; col ++) { |
| 733 back_alpha = dest_scan[3]; | 733 back_alpha = dest_scan[3]; |
| 734 if (back_alpha == 0) { | 734 if (back_alpha == 0) { |
| 735 if (clip_scan) { | 735 if (clip_scan) { |
| 736 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 736 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 737 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xff
ffff) | (src_alpha << 24)); | 737 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xff
ffff) | (src_alpha << 24)); |
| 738 } else { | 738 } else { |
| 739 FXARGB_COPY(dest_scan, src_scan); | 739 FXARGB_COPY(dest_scan, src_scan); |
| 740 } | 740 } |
| 741 dest_scan += 4; | 741 dest_scan += 4; |
| 742 src_scan += 4; | 742 src_scan += 4; |
| 743 continue; | 743 continue; |
| 744 } | 744 } |
| 745 FX_BYTE src_alpha; | 745 uint8_t src_alpha; |
| 746 if (clip_scan == NULL) { | 746 if (clip_scan == NULL) { |
| 747 src_alpha = src_scan[3]; | 747 src_alpha = src_scan[3]; |
| 748 } else { | 748 } else { |
| 749 src_alpha = clip_scan[col] * src_scan[3] / 255; | 749 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 750 } | 750 } |
| 751 if (src_alpha == 0) { | 751 if (src_alpha == 0) { |
| 752 dest_scan += 4; | 752 dest_scan += 4; |
| 753 src_scan += 4; | 753 src_scan += 4; |
| 754 continue; | 754 continue; |
| 755 } | 755 } |
| 756 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 756 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 757 dest_scan[3] = dest_alpha; | 757 dest_scan[3] = dest_alpha; |
| 758 int alpha_ratio = src_alpha * 255 / dest_alpha; | 758 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 759 if (bNonseparableBlend) { | 759 if (bNonseparableBlend) { |
| 760 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 760 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 761 } | 761 } |
| 762 for (int color = 0; color < 3; color ++) { | 762 for (int color = 0; color < 3; color ++) { |
| 763 if (blend_type) { | 763 if (blend_type) { |
| 764 int blended = bNonseparableBlend ? blended_colors[color]
: | 764 int blended = bNonseparableBlend ? blended_colors[color]
: |
| 765 _BLEND(blend_type, *dest_scan, *src_scan); | 765 _BLEND(blend_type, *dest_scan, *src_scan); |
| 766 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); | 766 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); |
| 767 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); | 767 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); |
| 768 } else { | 768 } else { |
| 769 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); | 769 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); |
| 770 } | 770 } |
| 771 dest_scan ++; | 771 dest_scan ++; |
| 772 src_scan ++; | 772 src_scan ++; |
| 773 } | 773 } |
| 774 dest_scan ++; | 774 dest_scan ++; |
| 775 src_scan ++; | 775 src_scan ++; |
| 776 } | 776 } |
| 777 } else { | 777 } else { |
| 778 for (int col = 0; col < pixel_count; col ++) { | 778 for (int col = 0; col < pixel_count; col ++) { |
| 779 FX_BYTE back_alpha = dest_scan[3]; | 779 uint8_t back_alpha = dest_scan[3]; |
| 780 if (back_alpha == 0) { | 780 if (back_alpha == 0) { |
| 781 if (clip_scan) { | 781 if (clip_scan) { |
| 782 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255
; | 782 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255
; |
| 783 FXARGB_SETDIB(dest_scan, FXARGB_MAKE((src_alpha << 24),
src_scan[2], src_scan[1], *src_scan)); | 783 FXARGB_SETDIB(dest_scan, FXARGB_MAKE((src_alpha << 24),
src_scan[2], src_scan[1], *src_scan)); |
| 784 } else { | 784 } else { |
| 785 FXARGB_SETDIB(dest_scan, FXARGB_MAKE((*src_alpha_scan <<
24), src_scan[2], src_scan[1], *src_scan)); | 785 FXARGB_SETDIB(dest_scan, FXARGB_MAKE((*src_alpha_scan <<
24), src_scan[2], src_scan[1], *src_scan)); |
| 786 } | 786 } |
| 787 dest_scan += 4; | 787 dest_scan += 4; |
| 788 src_scan += 3; | 788 src_scan += 3; |
| 789 src_alpha_scan ++; | 789 src_alpha_scan ++; |
| 790 continue; | 790 continue; |
| 791 } | 791 } |
| 792 FX_BYTE src_alpha; | 792 uint8_t src_alpha; |
| 793 if (clip_scan == NULL) { | 793 if (clip_scan == NULL) { |
| 794 src_alpha = *src_alpha_scan ++; | 794 src_alpha = *src_alpha_scan ++; |
| 795 } else { | 795 } else { |
| 796 src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255; | 796 src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255; |
| 797 } | 797 } |
| 798 if (src_alpha == 0) { | 798 if (src_alpha == 0) { |
| 799 dest_scan += 4; | 799 dest_scan += 4; |
| 800 src_scan += 3; | 800 src_scan += 3; |
| 801 continue; | 801 continue; |
| 802 } | 802 } |
| 803 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 803 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 804 dest_scan[3] = dest_alpha; | 804 dest_scan[3] = dest_alpha; |
| 805 int alpha_ratio = src_alpha * 255 / dest_alpha; | 805 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 806 if (bNonseparableBlend) { | 806 if (bNonseparableBlend) { |
| 807 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 807 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 808 } | 808 } |
| 809 for (int color = 0; color < 3; color ++) { | 809 for (int color = 0; color < 3; color ++) { |
| 810 if (blend_type) { | 810 if (blend_type) { |
| 811 int blended = bNonseparableBlend ? blended_colors[color]
: | 811 int blended = bNonseparableBlend ? blended_colors[color]
: |
| 812 _BLEND(blend_type, *dest_scan, *src_scan); | 812 _BLEND(blend_type, *dest_scan, *src_scan); |
| 813 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); | 813 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); |
| 814 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); | 814 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); |
| 815 } else { | 815 } else { |
| 816 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); | 816 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); |
| 817 } | 817 } |
| 818 dest_scan ++; | 818 dest_scan ++; |
| 819 src_scan ++; | 819 src_scan ++; |
| 820 } | 820 } |
| 821 dest_scan ++; | 821 dest_scan ++; |
| 822 } | 822 } |
| 823 } | 823 } |
| 824 } else { | 824 } else { |
| 825 if (src_alpha_scan) { | 825 if (src_alpha_scan) { |
| 826 for (int col = 0; col < pixel_count; col ++) { | 826 for (int col = 0; col < pixel_count; col ++) { |
| 827 FX_BYTE back_alpha = *dest_alpha_scan; | 827 uint8_t back_alpha = *dest_alpha_scan; |
| 828 if (back_alpha == 0) { | 828 if (back_alpha == 0) { |
| 829 if (clip_scan) { | 829 if (clip_scan) { |
| 830 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255
; | 830 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255
; |
| 831 *dest_alpha_scan = src_alpha; | 831 *dest_alpha_scan = src_alpha; |
| 832 *dest_scan++ = *src_scan++; | 832 *dest_scan++ = *src_scan++; |
| 833 *dest_scan++ = *src_scan++; | 833 *dest_scan++ = *src_scan++; |
| 834 *dest_scan++ = *src_scan++; | 834 *dest_scan++ = *src_scan++; |
| 835 } else { | 835 } else { |
| 836 *dest_alpha_scan = *src_alpha_scan; | 836 *dest_alpha_scan = *src_alpha_scan; |
| 837 *dest_scan++ = *src_scan++; | 837 *dest_scan++ = *src_scan++; |
| 838 *dest_scan++ = *src_scan++; | 838 *dest_scan++ = *src_scan++; |
| 839 *dest_scan++ = *src_scan++; | 839 *dest_scan++ = *src_scan++; |
| 840 } | 840 } |
| 841 dest_alpha_scan ++; | 841 dest_alpha_scan ++; |
| 842 src_alpha_scan ++; | 842 src_alpha_scan ++; |
| 843 continue; | 843 continue; |
| 844 } | 844 } |
| 845 FX_BYTE src_alpha; | 845 uint8_t src_alpha; |
| 846 if (clip_scan == NULL) { | 846 if (clip_scan == NULL) { |
| 847 src_alpha = *src_alpha_scan ++; | 847 src_alpha = *src_alpha_scan ++; |
| 848 } else { | 848 } else { |
| 849 src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255; | 849 src_alpha = clip_scan[col] * (*src_alpha_scan ++) / 255; |
| 850 } | 850 } |
| 851 if (src_alpha == 0) { | 851 if (src_alpha == 0) { |
| 852 dest_scan += 3; | 852 dest_scan += 3; |
| 853 src_scan += 3; | 853 src_scan += 3; |
| 854 dest_alpha_scan ++; | 854 dest_alpha_scan ++; |
| 855 continue; | 855 continue; |
| 856 } | 856 } |
| 857 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 857 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 858 *dest_alpha_scan ++ = dest_alpha; | 858 *dest_alpha_scan ++ = dest_alpha; |
| 859 int alpha_ratio = src_alpha * 255 / dest_alpha; | 859 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 860 if (bNonseparableBlend) { | 860 if (bNonseparableBlend) { |
| 861 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 861 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 862 } | 862 } |
| 863 for (int color = 0; color < 3; color ++) { | 863 for (int color = 0; color < 3; color ++) { |
| 864 if (blend_type) { | 864 if (blend_type) { |
| 865 int blended = bNonseparableBlend ? blended_colors[color]
: | 865 int blended = bNonseparableBlend ? blended_colors[color]
: |
| 866 _BLEND(blend_type, *dest_scan, *src_scan); | 866 _BLEND(blend_type, *dest_scan, *src_scan); |
| 867 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); | 867 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); |
| 868 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); | 868 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alph
a_ratio); |
| 869 } else { | 869 } else { |
| 870 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); | 870 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, al
pha_ratio); |
| 871 } | 871 } |
| 872 dest_scan ++; | 872 dest_scan ++; |
| 873 src_scan ++; | 873 src_scan ++; |
| 874 } | 874 } |
| 875 } | 875 } |
| 876 } else { | 876 } else { |
| 877 for (int col = 0; col < pixel_count; col ++) { | 877 for (int col = 0; col < pixel_count; col ++) { |
| 878 FX_BYTE back_alpha = *dest_alpha_scan; | 878 uint8_t back_alpha = *dest_alpha_scan; |
| 879 if (back_alpha == 0) { | 879 if (back_alpha == 0) { |
| 880 if (clip_scan) { | 880 if (clip_scan) { |
| 881 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 881 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 882 *dest_alpha_scan = src_alpha; | 882 *dest_alpha_scan = src_alpha; |
| 883 *dest_scan++ = *src_scan++; | 883 *dest_scan++ = *src_scan++; |
| 884 *dest_scan++ = *src_scan++; | 884 *dest_scan++ = *src_scan++; |
| 885 *dest_scan++ = *src_scan++; | 885 *dest_scan++ = *src_scan++; |
| 886 } else { | 886 } else { |
| 887 *dest_alpha_scan = src_scan[3]; | 887 *dest_alpha_scan = src_scan[3]; |
| 888 *dest_scan++ = *src_scan++; | 888 *dest_scan++ = *src_scan++; |
| 889 *dest_scan++ = *src_scan++; | 889 *dest_scan++ = *src_scan++; |
| 890 *dest_scan++ = *src_scan++; | 890 *dest_scan++ = *src_scan++; |
| 891 } | 891 } |
| 892 dest_alpha_scan ++; | 892 dest_alpha_scan ++; |
| 893 src_scan ++; | 893 src_scan ++; |
| 894 continue; | 894 continue; |
| 895 } | 895 } |
| 896 FX_BYTE src_alpha; | 896 uint8_t src_alpha; |
| 897 if (clip_scan == NULL) { | 897 if (clip_scan == NULL) { |
| 898 src_alpha = src_scan[3]; | 898 src_alpha = src_scan[3]; |
| 899 } else { | 899 } else { |
| 900 src_alpha = clip_scan[col] * src_scan[3] / 255; | 900 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 901 } | 901 } |
| 902 if (src_alpha == 0) { | 902 if (src_alpha == 0) { |
| 903 dest_scan += 3; | 903 dest_scan += 3; |
| 904 src_scan += 4; | 904 src_scan += 4; |
| 905 dest_alpha_scan ++; | 905 dest_alpha_scan ++; |
| 906 continue; | 906 continue; |
| 907 } | 907 } |
| 908 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 908 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 909 *dest_alpha_scan++ = dest_alpha; | 909 *dest_alpha_scan++ = dest_alpha; |
| 910 int alpha_ratio = src_alpha * 255 / dest_alpha; | 910 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 911 if (bNonseparableBlend) { | 911 if (bNonseparableBlend) { |
| 912 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 912 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 913 } | 913 } |
| 914 for (int color = 0; color < 3; color ++) { | 914 for (int color = 0; color < 3; color ++) { |
| 915 if (blend_type) { | 915 if (blend_type) { |
| 916 int blended = bNonseparableBlend ? blended_colors[color]
: | 916 int blended = bNonseparableBlend ? blended_colors[color]
: |
| 917 _BLEND(blend_type, *dest_scan, *src_scan); | 917 _BLEND(blend_type, *dest_scan, *src_scan); |
| 918 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); | 918 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alp
ha); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 929 } | 929 } |
| 930 } | 930 } |
| 931 void _CompositeRow_Rgb2Argb_Blend_NoClip(FX_LPBYTE dest_scan, FX_LPCBYTE src_sca
n, int width, int blend_type, int src_Bpp, | 931 void _CompositeRow_Rgb2Argb_Blend_NoClip(FX_LPBYTE dest_scan, FX_LPCBYTE src_sca
n, int width, int blend_type, int src_Bpp, |
| 932 FX_LPBYTE dest_alpha_scan) | 932 FX_LPBYTE dest_alpha_scan) |
| 933 { | 933 { |
| 934 int blended_colors[3]; | 934 int blended_colors[3]; |
| 935 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 935 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 936 int src_gap = src_Bpp - 3; | 936 int src_gap = src_Bpp - 3; |
| 937 if (dest_alpha_scan == NULL) { | 937 if (dest_alpha_scan == NULL) { |
| 938 for (int col = 0; col < width; col ++) { | 938 for (int col = 0; col < width; col ++) { |
| 939 FX_BYTE back_alpha = dest_scan[3]; | 939 uint8_t back_alpha = dest_scan[3]; |
| 940 if (back_alpha == 0) { | 940 if (back_alpha == 0) { |
| 941 if (src_Bpp == 4) { | 941 if (src_Bpp == 4) { |
| 942 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan
)); | 942 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan
)); |
| 943 } else { | 943 } else { |
| 944 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_
scan[1], src_scan[0])); | 944 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_
scan[1], src_scan[0])); |
| 945 } | 945 } |
| 946 dest_scan += 4; | 946 dest_scan += 4; |
| 947 src_scan += src_Bpp; | 947 src_scan += src_Bpp; |
| 948 continue; | 948 continue; |
| 949 } | 949 } |
| 950 dest_scan[3] = 0xff; | 950 dest_scan[3] = 0xff; |
| 951 if (bNonseparableBlend) { | 951 if (bNonseparableBlend) { |
| 952 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 952 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 953 } | 953 } |
| 954 for (int color = 0; color < 3; color ++) { | 954 for (int color = 0; color < 3; color ++) { |
| 955 int src_color = *src_scan; | 955 int src_color = *src_scan; |
| 956 int blended = bNonseparableBlend ? blended_colors[color] : | 956 int blended = bNonseparableBlend ? blended_colors[color] : |
| 957 _BLEND(blend_type, *dest_scan, src_color); | 957 _BLEND(blend_type, *dest_scan, src_color); |
| 958 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 958 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
| 959 dest_scan ++; | 959 dest_scan ++; |
| 960 src_scan ++; | 960 src_scan ++; |
| 961 } | 961 } |
| 962 dest_scan ++; | 962 dest_scan ++; |
| 963 src_scan += src_gap; | 963 src_scan += src_gap; |
| 964 } | 964 } |
| 965 } else { | 965 } else { |
| 966 for (int col = 0; col < width; col ++) { | 966 for (int col = 0; col < width; col ++) { |
| 967 FX_BYTE back_alpha = *dest_alpha_scan; | 967 uint8_t back_alpha = *dest_alpha_scan; |
| 968 if (back_alpha == 0) { | 968 if (back_alpha == 0) { |
| 969 *dest_scan++ = *src_scan++; | 969 *dest_scan++ = *src_scan++; |
| 970 *dest_scan++ = *src_scan++; | 970 *dest_scan++ = *src_scan++; |
| 971 *dest_scan++ = *src_scan++; | 971 *dest_scan++ = *src_scan++; |
| 972 *dest_alpha_scan++ = 0xff; | 972 *dest_alpha_scan++ = 0xff; |
| 973 src_scan += src_gap; | 973 src_scan += src_gap; |
| 974 continue; | 974 continue; |
| 975 } | 975 } |
| 976 *dest_alpha_scan++ = 0xff; | 976 *dest_alpha_scan++ = 0xff; |
| 977 if (bNonseparableBlend) { | 977 if (bNonseparableBlend) { |
| (...skipping 13 matching lines...) Expand all Loading... |
| 991 } | 991 } |
| 992 inline void _CompositeRow_Rgb2Argb_Blend_Clip(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, int width, int blend_type, int src_Bpp, FX_LPCBYTE clip_scan, | 992 inline void _CompositeRow_Rgb2Argb_Blend_Clip(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, int width, int blend_type, int src_Bpp, FX_LPCBYTE clip_scan, |
| 993 FX_LPBYTE dest_alpha_scan) | 993 FX_LPBYTE dest_alpha_scan) |
| 994 { | 994 { |
| 995 int blended_colors[3]; | 995 int blended_colors[3]; |
| 996 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 996 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 997 int src_gap = src_Bpp - 3; | 997 int src_gap = src_Bpp - 3; |
| 998 if (dest_alpha_scan == NULL) { | 998 if (dest_alpha_scan == NULL) { |
| 999 for (int col = 0; col < width; col ++) { | 999 for (int col = 0; col < width; col ++) { |
| 1000 int src_alpha = *clip_scan ++; | 1000 int src_alpha = *clip_scan ++; |
| 1001 FX_BYTE back_alpha = dest_scan[3]; | 1001 uint8_t back_alpha = dest_scan[3]; |
| 1002 if (back_alpha == 0) { | 1002 if (back_alpha == 0) { |
| 1003 *dest_scan++ = *src_scan++; | 1003 *dest_scan++ = *src_scan++; |
| 1004 *dest_scan++ = *src_scan++; | 1004 *dest_scan++ = *src_scan++; |
| 1005 *dest_scan++ = *src_scan++; | 1005 *dest_scan++ = *src_scan++; |
| 1006 src_scan += src_gap; | 1006 src_scan += src_gap; |
| 1007 dest_scan ++; | 1007 dest_scan ++; |
| 1008 continue; | 1008 continue; |
| 1009 } | 1009 } |
| 1010 if (src_alpha == 0) { | 1010 if (src_alpha == 0) { |
| 1011 dest_scan += 4; | 1011 dest_scan += 4; |
| 1012 src_scan += src_Bpp; | 1012 src_scan += src_Bpp; |
| 1013 continue; | 1013 continue; |
| 1014 } | 1014 } |
| 1015 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1015 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1016 dest_scan[3] = dest_alpha; | 1016 dest_scan[3] = dest_alpha; |
| 1017 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1017 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1018 if (bNonseparableBlend) { | 1018 if (bNonseparableBlend) { |
| 1019 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1019 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 1020 } | 1020 } |
| 1021 for (int color = 0; color < 3; color ++) { | 1021 for (int color = 0; color < 3; color ++) { |
| 1022 int src_color = *src_scan; | 1022 int src_color = *src_scan; |
| 1023 int blended = bNonseparableBlend ? blended_colors[color] : | 1023 int blended = bNonseparableBlend ? blended_colors[color] : |
| 1024 _BLEND(blend_type, *dest_scan, src_color); | 1024 _BLEND(blend_type, *dest_scan, src_color); |
| 1025 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 1025 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
| 1026 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio)
; | 1026 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio)
; |
| 1027 dest_scan ++; | 1027 dest_scan ++; |
| 1028 src_scan ++; | 1028 src_scan ++; |
| 1029 } | 1029 } |
| 1030 dest_scan ++; | 1030 dest_scan ++; |
| 1031 src_scan += src_gap; | 1031 src_scan += src_gap; |
| 1032 } | 1032 } |
| 1033 } else { | 1033 } else { |
| 1034 for (int col = 0; col < width; col ++) { | 1034 for (int col = 0; col < width; col ++) { |
| 1035 int src_alpha = *clip_scan ++; | 1035 int src_alpha = *clip_scan ++; |
| 1036 FX_BYTE back_alpha = *dest_alpha_scan; | 1036 uint8_t back_alpha = *dest_alpha_scan; |
| 1037 if (back_alpha == 0) { | 1037 if (back_alpha == 0) { |
| 1038 *dest_scan++ = *src_scan++; | 1038 *dest_scan++ = *src_scan++; |
| 1039 *dest_scan++ = *src_scan++; | 1039 *dest_scan++ = *src_scan++; |
| 1040 *dest_scan++ = *src_scan++; | 1040 *dest_scan++ = *src_scan++; |
| 1041 src_scan += src_gap; | 1041 src_scan += src_gap; |
| 1042 dest_alpha_scan++; | 1042 dest_alpha_scan++; |
| 1043 continue; | 1043 continue; |
| 1044 } | 1044 } |
| 1045 if (src_alpha == 0) { | 1045 if (src_alpha == 0) { |
| 1046 dest_scan += 3; | 1046 dest_scan += 3; |
| 1047 dest_alpha_scan++; | 1047 dest_alpha_scan++; |
| 1048 src_scan += src_Bpp; | 1048 src_scan += src_Bpp; |
| 1049 continue; | 1049 continue; |
| 1050 } | 1050 } |
| 1051 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1051 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1052 *dest_alpha_scan++ = dest_alpha; | 1052 *dest_alpha_scan++ = dest_alpha; |
| 1053 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1053 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1054 if (bNonseparableBlend) { | 1054 if (bNonseparableBlend) { |
| 1055 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1055 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 1056 } | 1056 } |
| 1057 for (int color = 0; color < 3; color ++) { | 1057 for (int color = 0; color < 3; color ++) { |
| 1058 int src_color = *src_scan; | 1058 int src_color = *src_scan; |
| 1059 int blended = bNonseparableBlend ? blended_colors[color] : | 1059 int blended = bNonseparableBlend ? blended_colors[color] : |
| 1060 _BLEND(blend_type, *dest_scan, src_color); | 1060 _BLEND(blend_type, *dest_scan, src_color); |
| 1061 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 1061 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1081 *dest_scan++ = 255; | 1081 *dest_scan++ = 255; |
| 1082 src_scan += src_gap; | 1082 src_scan += src_gap; |
| 1083 continue; | 1083 continue; |
| 1084 } | 1084 } |
| 1085 if (src_alpha == 0) { | 1085 if (src_alpha == 0) { |
| 1086 dest_scan += 4; | 1086 dest_scan += 4; |
| 1087 src_scan += src_Bpp; | 1087 src_scan += src_Bpp; |
| 1088 continue; | 1088 continue; |
| 1089 } | 1089 } |
| 1090 int back_alpha = dest_scan[3]; | 1090 int back_alpha = dest_scan[3]; |
| 1091 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1091 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1092 dest_scan[3] = dest_alpha; | 1092 dest_scan[3] = dest_alpha; |
| 1093 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1093 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1094 for (int color = 0; color < 3; color ++) { | 1094 for (int color = 0; color < 3; color ++) { |
| 1095 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_rati
o); | 1095 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_rati
o); |
| 1096 dest_scan ++; | 1096 dest_scan ++; |
| 1097 src_scan ++; | 1097 src_scan ++; |
| 1098 } | 1098 } |
| 1099 dest_scan ++; | 1099 dest_scan ++; |
| 1100 src_scan += src_gap; | 1100 src_scan += src_gap; |
| 1101 } | 1101 } |
| 1102 } else { | 1102 } else { |
| 1103 for (int col = 0; col < width; col ++) { | 1103 for (int col = 0; col < width; col ++) { |
| 1104 int src_alpha = clip_scan[col]; | 1104 int src_alpha = clip_scan[col]; |
| 1105 if (src_alpha == 255) { | 1105 if (src_alpha == 255) { |
| 1106 *dest_scan++ = *src_scan++; | 1106 *dest_scan++ = *src_scan++; |
| 1107 *dest_scan++ = *src_scan++; | 1107 *dest_scan++ = *src_scan++; |
| 1108 *dest_scan++ = *src_scan++; | 1108 *dest_scan++ = *src_scan++; |
| 1109 *dest_alpha_scan++ = 255; | 1109 *dest_alpha_scan++ = 255; |
| 1110 src_scan += src_gap; | 1110 src_scan += src_gap; |
| 1111 continue; | 1111 continue; |
| 1112 } | 1112 } |
| 1113 if (src_alpha == 0) { | 1113 if (src_alpha == 0) { |
| 1114 dest_scan += 3; | 1114 dest_scan += 3; |
| 1115 dest_alpha_scan ++; | 1115 dest_alpha_scan ++; |
| 1116 src_scan += src_Bpp; | 1116 src_scan += src_Bpp; |
| 1117 continue; | 1117 continue; |
| 1118 } | 1118 } |
| 1119 int back_alpha = *dest_alpha_scan; | 1119 int back_alpha = *dest_alpha_scan; |
| 1120 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1120 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1121 *dest_alpha_scan ++ = dest_alpha; | 1121 *dest_alpha_scan ++ = dest_alpha; |
| 1122 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1122 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1123 for (int color = 0; color < 3; color ++) { | 1123 for (int color = 0; color < 3; color ++) { |
| 1124 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_rati
o); | 1124 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_rati
o); |
| 1125 dest_scan ++; | 1125 dest_scan ++; |
| 1126 src_scan ++; | 1126 src_scan ++; |
| 1127 } | 1127 } |
| 1128 src_scan += src_gap; | 1128 src_scan += src_gap; |
| 1129 } | 1129 } |
| 1130 } | 1130 } |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1154 } | 1154 } |
| 1155 } | 1155 } |
| 1156 inline void _CompositeRow_Argb2Rgb_Blend(FX_LPBYTE dest_scan, FX_LPCBYTE src_sca
n, int width, int blend_type, int dest_Bpp, FX_LPCBYTE clip_scan, | 1156 inline void _CompositeRow_Argb2Rgb_Blend(FX_LPBYTE dest_scan, FX_LPCBYTE src_sca
n, int width, int blend_type, int dest_Bpp, FX_LPCBYTE clip_scan, |
| 1157 FX_LPCBYTE src_alpha_scan) | 1157 FX_LPCBYTE src_alpha_scan) |
| 1158 { | 1158 { |
| 1159 int blended_colors[3]; | 1159 int blended_colors[3]; |
| 1160 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1160 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1161 int dest_gap = dest_Bpp - 3; | 1161 int dest_gap = dest_Bpp - 3; |
| 1162 if (src_alpha_scan == NULL) { | 1162 if (src_alpha_scan == NULL) { |
| 1163 for (int col = 0; col < width; col ++) { | 1163 for (int col = 0; col < width; col ++) { |
| 1164 FX_BYTE src_alpha; | 1164 uint8_t src_alpha; |
| 1165 if (clip_scan) { | 1165 if (clip_scan) { |
| 1166 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1166 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 1167 } else { | 1167 } else { |
| 1168 src_alpha = src_scan[3]; | 1168 src_alpha = src_scan[3]; |
| 1169 } | 1169 } |
| 1170 if (src_alpha == 0) { | 1170 if (src_alpha == 0) { |
| 1171 dest_scan += dest_Bpp; | 1171 dest_scan += dest_Bpp; |
| 1172 src_scan += 4; | 1172 src_scan += 4; |
| 1173 continue; | 1173 continue; |
| 1174 } | 1174 } |
| 1175 if (bNonseparableBlend) { | 1175 if (bNonseparableBlend) { |
| 1176 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1176 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 1177 } | 1177 } |
| 1178 for (int color = 0; color < 3; color ++) { | 1178 for (int color = 0; color < 3; color ++) { |
| 1179 int back_color = *dest_scan; | 1179 int back_color = *dest_scan; |
| 1180 int blended = bNonseparableBlend ? blended_colors[color] : | 1180 int blended = bNonseparableBlend ? blended_colors[color] : |
| 1181 _BLEND(blend_type, back_color, *src_scan); | 1181 _BLEND(blend_type, back_color, *src_scan); |
| 1182 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); | 1182 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); |
| 1183 dest_scan ++; | 1183 dest_scan ++; |
| 1184 src_scan ++; | 1184 src_scan ++; |
| 1185 } | 1185 } |
| 1186 dest_scan += dest_gap; | 1186 dest_scan += dest_gap; |
| 1187 src_scan ++; | 1187 src_scan ++; |
| 1188 } | 1188 } |
| 1189 } else { | 1189 } else { |
| 1190 for (int col = 0; col < width; col ++) { | 1190 for (int col = 0; col < width; col ++) { |
| 1191 FX_BYTE src_alpha; | 1191 uint8_t src_alpha; |
| 1192 if (clip_scan) { | 1192 if (clip_scan) { |
| 1193 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; | 1193 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; |
| 1194 } else { | 1194 } else { |
| 1195 src_alpha = *src_alpha_scan++; | 1195 src_alpha = *src_alpha_scan++; |
| 1196 } | 1196 } |
| 1197 if (src_alpha == 0) { | 1197 if (src_alpha == 0) { |
| 1198 dest_scan += dest_Bpp; | 1198 dest_scan += dest_Bpp; |
| 1199 src_scan += 3; | 1199 src_scan += 3; |
| 1200 continue; | 1200 continue; |
| 1201 } | 1201 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 1213 dest_scan += dest_gap; | 1213 dest_scan += dest_gap; |
| 1214 } | 1214 } |
| 1215 } | 1215 } |
| 1216 } | 1216 } |
| 1217 inline void _CompositeRow_Argb2Rgb_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE src_s
can, int width, int dest_Bpp, FX_LPCBYTE clip_scan, | 1217 inline void _CompositeRow_Argb2Rgb_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE src_s
can, int width, int dest_Bpp, FX_LPCBYTE clip_scan, |
| 1218 FX_LPCBYTE src_alpha_scan) | 1218 FX_LPCBYTE src_alpha_scan) |
| 1219 { | 1219 { |
| 1220 int dest_gap = dest_Bpp - 3; | 1220 int dest_gap = dest_Bpp - 3; |
| 1221 if (src_alpha_scan == NULL) { | 1221 if (src_alpha_scan == NULL) { |
| 1222 for (int col = 0; col < width; col ++) { | 1222 for (int col = 0; col < width; col ++) { |
| 1223 FX_BYTE src_alpha; | 1223 uint8_t src_alpha; |
| 1224 if (clip_scan) { | 1224 if (clip_scan) { |
| 1225 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1225 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 1226 } else { | 1226 } else { |
| 1227 src_alpha = src_scan[3]; | 1227 src_alpha = src_scan[3]; |
| 1228 } | 1228 } |
| 1229 if (src_alpha == 255) { | 1229 if (src_alpha == 255) { |
| 1230 *dest_scan++ = *src_scan++; | 1230 *dest_scan++ = *src_scan++; |
| 1231 *dest_scan++ = *src_scan++; | 1231 *dest_scan++ = *src_scan++; |
| 1232 *dest_scan++ = *src_scan++; | 1232 *dest_scan++ = *src_scan++; |
| 1233 dest_scan += dest_gap; | 1233 dest_scan += dest_gap; |
| 1234 src_scan ++; | 1234 src_scan ++; |
| 1235 continue; | 1235 continue; |
| 1236 } | 1236 } |
| 1237 if (src_alpha == 0) { | 1237 if (src_alpha == 0) { |
| 1238 dest_scan += dest_Bpp; | 1238 dest_scan += dest_Bpp; |
| 1239 src_scan += 4; | 1239 src_scan += 4; |
| 1240 continue; | 1240 continue; |
| 1241 } | 1241 } |
| 1242 for (int color = 0; color < 3; color ++) { | 1242 for (int color = 0; color < 3; color ++) { |
| 1243 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha)
; | 1243 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha)
; |
| 1244 dest_scan ++; | 1244 dest_scan ++; |
| 1245 src_scan ++; | 1245 src_scan ++; |
| 1246 } | 1246 } |
| 1247 dest_scan += dest_gap; | 1247 dest_scan += dest_gap; |
| 1248 src_scan ++; | 1248 src_scan ++; |
| 1249 } | 1249 } |
| 1250 } else { | 1250 } else { |
| 1251 for (int col = 0; col < width; col ++) { | 1251 for (int col = 0; col < width; col ++) { |
| 1252 FX_BYTE src_alpha; | 1252 uint8_t src_alpha; |
| 1253 if (clip_scan) { | 1253 if (clip_scan) { |
| 1254 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; | 1254 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; |
| 1255 } else { | 1255 } else { |
| 1256 src_alpha = *src_alpha_scan++; | 1256 src_alpha = *src_alpha_scan++; |
| 1257 } | 1257 } |
| 1258 if (src_alpha == 255) { | 1258 if (src_alpha == 255) { |
| 1259 *dest_scan++ = *src_scan++; | 1259 *dest_scan++ = *src_scan++; |
| 1260 *dest_scan++ = *src_scan++; | 1260 *dest_scan++ = *src_scan++; |
| 1261 *dest_scan++ = *src_scan++; | 1261 *dest_scan++ = *src_scan++; |
| 1262 dest_scan += dest_gap; | 1262 dest_scan += dest_gap; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1299 src_scan += src_gap; | 1299 src_scan += src_gap; |
| 1300 } | 1300 } |
| 1301 } | 1301 } |
| 1302 inline void _CompositeRow_Rgb2Rgb_Blend_Clip(FX_LPBYTE dest_scan, FX_LPCBYTE src
_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, FX_LPCBYTE clip_sca
n) | 1302 inline void _CompositeRow_Rgb2Rgb_Blend_Clip(FX_LPBYTE dest_scan, FX_LPCBYTE src
_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, FX_LPCBYTE clip_sca
n) |
| 1303 { | 1303 { |
| 1304 int blended_colors[3]; | 1304 int blended_colors[3]; |
| 1305 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1305 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1306 int dest_gap = dest_Bpp - 3; | 1306 int dest_gap = dest_Bpp - 3; |
| 1307 int src_gap = src_Bpp - 3; | 1307 int src_gap = src_Bpp - 3; |
| 1308 for (int col = 0; col < width; col ++) { | 1308 for (int col = 0; col < width; col ++) { |
| 1309 FX_BYTE src_alpha = *clip_scan ++; | 1309 uint8_t src_alpha = *clip_scan ++; |
| 1310 if (src_alpha == 0) { | 1310 if (src_alpha == 0) { |
| 1311 dest_scan += dest_Bpp; | 1311 dest_scan += dest_Bpp; |
| 1312 src_scan += src_Bpp; | 1312 src_scan += src_Bpp; |
| 1313 continue; | 1313 continue; |
| 1314 } | 1314 } |
| 1315 if (bNonseparableBlend) { | 1315 if (bNonseparableBlend) { |
| 1316 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1316 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 1317 } | 1317 } |
| 1318 for (int color = 0; color < 3; color ++) { | 1318 for (int color = 0; color < 3; color ++) { |
| 1319 int src_color = *src_scan; | 1319 int src_color = *src_scan; |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1389 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); | 1389 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); |
| 1390 dp[3] = src_scan[3]; | 1390 dp[3] = src_scan[3]; |
| 1391 src_scan += 4; | 1391 src_scan += 4; |
| 1392 dp += 4; | 1392 dp += 4; |
| 1393 } | 1393 } |
| 1394 } else { | 1394 } else { |
| 1395 int blended_colors[3]; | 1395 int blended_colors[3]; |
| 1396 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1396 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1397 for (int col = 0; col < pixel_count; col ++) { | 1397 for (int col = 0; col < pixel_count; col ++) { |
| 1398 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src
_scan, 1); | 1398 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src
_scan, 1); |
| 1399 FX_BYTE back_alpha = *dest_alpha_scan; | 1399 uint8_t back_alpha = *dest_alpha_scan; |
| 1400 if (back_alpha == 0) { | 1400 if (back_alpha == 0) { |
| 1401 if (clip_scan) { | 1401 if (clip_scan) { |
| 1402 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 1402 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 1403 *dest_alpha_scan = src_alpha; | 1403 *dest_alpha_scan = src_alpha; |
| 1404 *dest_scan++ = *src_cache_scan++; | 1404 *dest_scan++ = *src_cache_scan++; |
| 1405 *dest_scan++ = *src_cache_scan++; | 1405 *dest_scan++ = *src_cache_scan++; |
| 1406 *dest_scan++ = *src_cache_scan++; | 1406 *dest_scan++ = *src_cache_scan++; |
| 1407 } else { | 1407 } else { |
| 1408 *dest_alpha_scan = src_scan[3]; | 1408 *dest_alpha_scan = src_scan[3]; |
| 1409 *dest_scan++ = *src_cache_scan++; | 1409 *dest_scan++ = *src_cache_scan++; |
| 1410 *dest_scan++ = *src_cache_scan++; | 1410 *dest_scan++ = *src_cache_scan++; |
| 1411 *dest_scan++ = *src_cache_scan++; | 1411 *dest_scan++ = *src_cache_scan++; |
| 1412 } | 1412 } |
| 1413 dest_alpha_scan ++; | 1413 dest_alpha_scan ++; |
| 1414 src_scan += 4; | 1414 src_scan += 4; |
| 1415 continue; | 1415 continue; |
| 1416 } | 1416 } |
| 1417 FX_BYTE src_alpha; | 1417 uint8_t src_alpha; |
| 1418 if (clip_scan == NULL) { | 1418 if (clip_scan == NULL) { |
| 1419 src_alpha = src_scan[3]; | 1419 src_alpha = src_scan[3]; |
| 1420 } else { | 1420 } else { |
| 1421 src_alpha = clip_scan[col] * src_scan[3] / 255; | 1421 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 1422 } | 1422 } |
| 1423 src_scan += 4; | 1423 src_scan += 4; |
| 1424 if (src_alpha == 0) { | 1424 if (src_alpha == 0) { |
| 1425 dest_scan += 3; | 1425 dest_scan += 3; |
| 1426 src_cache_scan += 3; | 1426 src_cache_scan += 3; |
| 1427 dest_alpha_scan ++; | 1427 dest_alpha_scan ++; |
| 1428 continue; | 1428 continue; |
| 1429 } | 1429 } |
| 1430 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 1430 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 1431 *dest_alpha_scan ++ = dest_alpha; | 1431 *dest_alpha_scan ++ = dest_alpha; |
| 1432 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1432 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1433 if (bNonseparableBlend) { | 1433 if (bNonseparableBlend) { |
| 1434 _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_co
lors); | 1434 _RGB_Blend(blend_type, src_cache_scan, dest_scan, blended_co
lors); |
| 1435 } | 1435 } |
| 1436 for (int color = 0; color < 3; color ++) { | 1436 for (int color = 0; color < 3; color ++) { |
| 1437 if (blend_type) { | 1437 if (blend_type) { |
| 1438 int blended = bNonseparableBlend ? blended_colors[color]
: | 1438 int blended = bNonseparableBlend ? blended_colors[color]
: |
| 1439 _BLEND(blend_type, *dest_scan, *src_cache_
scan); | 1439 _BLEND(blend_type, *dest_scan, *src_cache_
scan); |
| 1440 blended = FXDIB_ALPHA_MERGE(*src_cache_scan, blended, ba
ck_alpha); | 1440 blended = FXDIB_ALPHA_MERGE(*src_cache_scan, blended, ba
ck_alpha); |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1520 { | 1520 { |
| 1521 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIcc
Module(); | 1521 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIcc
Module(); |
| 1522 if (src_alpha_scan) { | 1522 if (src_alpha_scan) { |
| 1523 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, w
idth); | 1523 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, w
idth); |
| 1524 } else { | 1524 } else { |
| 1525 int blended_colors[3]; | 1525 int blended_colors[3]; |
| 1526 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1526 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1527 int dest_gap = dest_Bpp - 3; | 1527 int dest_gap = dest_Bpp - 3; |
| 1528 for (int col = 0; col < width; col ++) { | 1528 for (int col = 0; col < width; col ++) { |
| 1529 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_sca
n, 1); | 1529 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_sca
n, 1); |
| 1530 FX_BYTE src_alpha; | 1530 uint8_t src_alpha; |
| 1531 if (clip_scan) { | 1531 if (clip_scan) { |
| 1532 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1532 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 1533 } else { | 1533 } else { |
| 1534 src_alpha = src_scan[3]; | 1534 src_alpha = src_scan[3]; |
| 1535 } | 1535 } |
| 1536 src_scan += 4; | 1536 src_scan += 4; |
| 1537 if (src_alpha == 0) { | 1537 if (src_alpha == 0) { |
| 1538 dest_scan += dest_Bpp; | 1538 dest_scan += dest_Bpp; |
| 1539 src_cache_scan += 3; | 1539 src_cache_scan += 3; |
| 1540 continue; | 1540 continue; |
| (...skipping 18 matching lines...) Expand all Loading... |
| 1559 inline void _CompositeRow_Argb2Rgb_NoBlend_Transform(FX_LPBYTE dest_scan, FX_LPC
BYTE src_scan, int width, int dest_Bpp, FX_LPCBYTE clip_scan, | 1559 inline void _CompositeRow_Argb2Rgb_NoBlend_Transform(FX_LPBYTE dest_scan, FX_LPC
BYTE src_scan, int width, int dest_Bpp, FX_LPCBYTE clip_scan, |
| 1560 FX_LPCBYTE src_alpha_scan, FX_LPBYTE src_cache_scan, void* pIccTransform
) | 1560 FX_LPCBYTE src_alpha_scan, FX_LPBYTE src_cache_scan, void* pIccTransform
) |
| 1561 { | 1561 { |
| 1562 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIcc
Module(); | 1562 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIcc
Module(); |
| 1563 if (src_alpha_scan) { | 1563 if (src_alpha_scan) { |
| 1564 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, w
idth); | 1564 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, w
idth); |
| 1565 } else { | 1565 } else { |
| 1566 int dest_gap = dest_Bpp - 3; | 1566 int dest_gap = dest_Bpp - 3; |
| 1567 for (int col = 0; col < width; col ++) { | 1567 for (int col = 0; col < width; col ++) { |
| 1568 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_sca
n, 1); | 1568 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_sca
n, 1); |
| 1569 FX_BYTE src_alpha; | 1569 uint8_t src_alpha; |
| 1570 if (clip_scan) { | 1570 if (clip_scan) { |
| 1571 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1571 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 1572 } else { | 1572 } else { |
| 1573 src_alpha = src_scan[3]; | 1573 src_alpha = src_scan[3]; |
| 1574 } | 1574 } |
| 1575 src_scan += 4; | 1575 src_scan += 4; |
| 1576 if (src_alpha == 255) { | 1576 if (src_alpha == 255) { |
| 1577 *dest_scan++ = *src_cache_scan++; | 1577 *dest_scan++ = *src_cache_scan++; |
| 1578 *dest_scan++ = *src_cache_scan++; | 1578 *dest_scan++ = *src_cache_scan++; |
| 1579 *dest_scan++ = *src_cache_scan++; | 1579 *dest_scan++ = *src_cache_scan++; |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1662 } | 1662 } |
| 1663 inline void _CompositeRow_8bppPal2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan,
FX_LPCBYTE pPalette, int pixel_count, | 1663 inline void _CompositeRow_8bppPal2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan,
FX_LPCBYTE pPalette, int pixel_count, |
| 1664 int blend_type, FX_LPCBYTE clip_scan, | 1664 int blend_type, FX_LPCBYTE clip_scan, |
| 1665 FX_LPCBYTE src_alpha_scan) | 1665 FX_LPCBYTE src_alpha_scan) |
| 1666 { | 1666 { |
| 1667 if (src_alpha_scan) { | 1667 if (src_alpha_scan) { |
| 1668 if (blend_type) { | 1668 if (blend_type) { |
| 1669 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1669 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1670 int blended_color; | 1670 int blended_color; |
| 1671 for (int col = 0; col < pixel_count; col ++) { | 1671 for (int col = 0; col < pixel_count; col ++) { |
| 1672 FX_BYTE gray = pPalette[*src_scan]; | 1672 uint8_t gray = pPalette[*src_scan]; |
| 1673 int src_alpha = *src_alpha_scan++; | 1673 int src_alpha = *src_alpha_scan++; |
| 1674 if (clip_scan) { | 1674 if (clip_scan) { |
| 1675 src_alpha = clip_scan[col] * src_alpha / 255; | 1675 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1676 } | 1676 } |
| 1677 if (bNonseparableBlend) { | 1677 if (bNonseparableBlend) { |
| 1678 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; | 1678 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; |
| 1679 } | 1679 } |
| 1680 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); | 1680 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); |
| 1681 if (src_alpha) { | 1681 if (src_alpha) { |
| 1682 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 1682 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 1683 } else { | 1683 } else { |
| 1684 *dest_scan = gray; | 1684 *dest_scan = gray; |
| 1685 } | 1685 } |
| 1686 dest_scan ++; | 1686 dest_scan ++; |
| 1687 src_scan ++; | 1687 src_scan ++; |
| 1688 } | 1688 } |
| 1689 return; | 1689 return; |
| 1690 } | 1690 } |
| 1691 for (int col = 0; col < pixel_count; col ++) { | 1691 for (int col = 0; col < pixel_count; col ++) { |
| 1692 FX_BYTE gray = pPalette[*src_scan]; | 1692 uint8_t gray = pPalette[*src_scan]; |
| 1693 int src_alpha = *src_alpha_scan++; | 1693 int src_alpha = *src_alpha_scan++; |
| 1694 if (clip_scan) { | 1694 if (clip_scan) { |
| 1695 src_alpha = clip_scan[col] * src_alpha / 255; | 1695 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1696 } | 1696 } |
| 1697 if (src_alpha) { | 1697 if (src_alpha) { |
| 1698 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 1698 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 1699 } else { | 1699 } else { |
| 1700 *dest_scan = gray; | 1700 *dest_scan = gray; |
| 1701 } | 1701 } |
| 1702 dest_scan ++; | 1702 dest_scan ++; |
| 1703 src_scan ++; | 1703 src_scan ++; |
| 1704 } | 1704 } |
| 1705 } else { | 1705 } else { |
| 1706 if (blend_type) { | 1706 if (blend_type) { |
| 1707 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1707 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1708 int blended_color; | 1708 int blended_color; |
| 1709 for (int col = 0; col < pixel_count; col ++) { | 1709 for (int col = 0; col < pixel_count; col ++) { |
| 1710 FX_BYTE gray = pPalette[*src_scan]; | 1710 uint8_t gray = pPalette[*src_scan]; |
| 1711 if (bNonseparableBlend) { | 1711 if (bNonseparableBlend) { |
| 1712 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; | 1712 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; |
| 1713 } | 1713 } |
| 1714 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); | 1714 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); |
| 1715 if (clip_scan && clip_scan[col] < 255) { | 1715 if (clip_scan && clip_scan[col] < 255) { |
| 1716 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[c
ol]); | 1716 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[c
ol]); |
| 1717 } else { | 1717 } else { |
| 1718 *dest_scan = gray; | 1718 *dest_scan = gray; |
| 1719 } | 1719 } |
| 1720 dest_scan ++; | 1720 dest_scan ++; |
| 1721 src_scan ++; | 1721 src_scan ++; |
| 1722 } | 1722 } |
| 1723 return; | 1723 return; |
| 1724 } | 1724 } |
| 1725 for (int col = 0; col < pixel_count; col ++) { | 1725 for (int col = 0; col < pixel_count; col ++) { |
| 1726 FX_BYTE gray = pPalette[*src_scan]; | 1726 uint8_t gray = pPalette[*src_scan]; |
| 1727 if (clip_scan && clip_scan[col] < 255) { | 1727 if (clip_scan && clip_scan[col] < 255) { |
| 1728 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col])
; | 1728 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col])
; |
| 1729 } else { | 1729 } else { |
| 1730 *dest_scan = gray; | 1730 *dest_scan = gray; |
| 1731 } | 1731 } |
| 1732 dest_scan ++; | 1732 dest_scan ++; |
| 1733 src_scan ++; | 1733 src_scan ++; |
| 1734 } | 1734 } |
| 1735 } | 1735 } |
| 1736 } | 1736 } |
| 1737 inline void _CompositeRow_8bppPal2Graya(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, FX_LPCBYTE pPalette, int pixel_count, | 1737 inline void _CompositeRow_8bppPal2Graya(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, FX_LPCBYTE pPalette, int pixel_count, |
| 1738 int blend_type, FX_LPCBYTE clip_scan, | 1738 int blend_type, FX_LPCBYTE clip_scan, |
| 1739 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE sr
c_alpha_scan) | 1739 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE sr
c_alpha_scan) |
| 1740 { | 1740 { |
| 1741 if (src_alpha_scan) { | 1741 if (src_alpha_scan) { |
| 1742 if (blend_type) { | 1742 if (blend_type) { |
| 1743 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1743 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1744 int blended_color; | 1744 int blended_color; |
| 1745 for (int col = 0; col < pixel_count; col ++) { | 1745 for (int col = 0; col < pixel_count; col ++) { |
| 1746 FX_BYTE gray = pPalette[*src_scan]; | 1746 uint8_t gray = pPalette[*src_scan]; |
| 1747 src_scan ++; | 1747 src_scan ++; |
| 1748 FX_BYTE back_alpha = *dest_alpha_scan; | 1748 uint8_t back_alpha = *dest_alpha_scan; |
| 1749 if (back_alpha == 0) { | 1749 if (back_alpha == 0) { |
| 1750 int src_alpha = *src_alpha_scan ++; | 1750 int src_alpha = *src_alpha_scan ++; |
| 1751 if (clip_scan) { | 1751 if (clip_scan) { |
| 1752 src_alpha = clip_scan[col] * src_alpha / 255; | 1752 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1753 } | 1753 } |
| 1754 if (src_alpha) { | 1754 if (src_alpha) { |
| 1755 *dest_scan = gray; | 1755 *dest_scan = gray; |
| 1756 *dest_alpha_scan = src_alpha; | 1756 *dest_alpha_scan = src_alpha; |
| 1757 } | 1757 } |
| 1758 dest_scan ++; | 1758 dest_scan ++; |
| 1759 dest_alpha_scan ++; | 1759 dest_alpha_scan ++; |
| 1760 continue; | 1760 continue; |
| 1761 } | 1761 } |
| 1762 FX_BYTE src_alpha = *src_alpha_scan++; | 1762 uint8_t src_alpha = *src_alpha_scan++; |
| 1763 if (clip_scan) { | 1763 if (clip_scan) { |
| 1764 src_alpha = clip_scan[col] * src_alpha / 255; | 1764 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1765 } | 1765 } |
| 1766 if (src_alpha == 0) { | 1766 if (src_alpha == 0) { |
| 1767 dest_scan ++; | 1767 dest_scan ++; |
| 1768 dest_alpha_scan ++; | 1768 dest_alpha_scan ++; |
| 1769 continue; | 1769 continue; |
| 1770 } | 1770 } |
| 1771 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alp
ha / 255; | 1771 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alp
ha / 255; |
| 1772 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); | 1772 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); |
| 1773 if (bNonseparableBlend) { | 1773 if (bNonseparableBlend) { |
| 1774 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; | 1774 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; |
| 1775 } | 1775 } |
| 1776 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); | 1776 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); |
| 1777 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1777 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1778 dest_alpha_scan ++; | 1778 dest_alpha_scan ++; |
| 1779 dest_scan ++; | 1779 dest_scan ++; |
| 1780 } | 1780 } |
| 1781 return; | 1781 return; |
| 1782 } | 1782 } |
| 1783 for (int col = 0; col < pixel_count; col ++) { | 1783 for (int col = 0; col < pixel_count; col ++) { |
| 1784 FX_BYTE gray = pPalette[*src_scan]; | 1784 uint8_t gray = pPalette[*src_scan]; |
| 1785 src_scan ++; | 1785 src_scan ++; |
| 1786 FX_BYTE back_alpha = *dest_alpha_scan; | 1786 uint8_t back_alpha = *dest_alpha_scan; |
| 1787 if (back_alpha == 0) { | 1787 if (back_alpha == 0) { |
| 1788 int src_alpha = *src_alpha_scan ++; | 1788 int src_alpha = *src_alpha_scan ++; |
| 1789 if (clip_scan) { | 1789 if (clip_scan) { |
| 1790 src_alpha = clip_scan[col] * src_alpha / 255; | 1790 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1791 } | 1791 } |
| 1792 if (src_alpha) { | 1792 if (src_alpha) { |
| 1793 *dest_scan = gray; | 1793 *dest_scan = gray; |
| 1794 *dest_alpha_scan = src_alpha; | 1794 *dest_alpha_scan = src_alpha; |
| 1795 } | 1795 } |
| 1796 dest_scan ++; | 1796 dest_scan ++; |
| 1797 dest_alpha_scan ++; | 1797 dest_alpha_scan ++; |
| 1798 continue; | 1798 continue; |
| 1799 } | 1799 } |
| 1800 FX_BYTE src_alpha = *src_alpha_scan++; | 1800 uint8_t src_alpha = *src_alpha_scan++; |
| 1801 if (clip_scan) { | 1801 if (clip_scan) { |
| 1802 src_alpha = clip_scan[col] * src_alpha / 255; | 1802 src_alpha = clip_scan[col] * src_alpha / 255; |
| 1803 } | 1803 } |
| 1804 if (src_alpha == 0) { | 1804 if (src_alpha == 0) { |
| 1805 dest_scan ++; | 1805 dest_scan ++; |
| 1806 dest_alpha_scan ++; | 1806 dest_alpha_scan ++; |
| 1807 continue; | 1807 continue; |
| 1808 } | 1808 } |
| 1809 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha /
255; | 1809 *dest_alpha_scan = back_alpha + src_alpha - back_alpha * src_alpha /
255; |
| 1810 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); | 1810 int alpha_ratio = src_alpha * 255 / (*dest_alpha_scan); |
| 1811 dest_alpha_scan ++; | 1811 dest_alpha_scan ++; |
| 1812 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1812 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1813 dest_scan ++; | 1813 dest_scan ++; |
| 1814 } | 1814 } |
| 1815 } else { | 1815 } else { |
| 1816 if (blend_type) { | 1816 if (blend_type) { |
| 1817 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1817 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1818 int blended_color; | 1818 int blended_color; |
| 1819 for (int col = 0; col < pixel_count; col ++) { | 1819 for (int col = 0; col < pixel_count; col ++) { |
| 1820 FX_BYTE gray = pPalette[*src_scan]; | 1820 uint8_t gray = pPalette[*src_scan]; |
| 1821 src_scan ++; | 1821 src_scan ++; |
| 1822 if (clip_scan == NULL || clip_scan[col] == 255) { | 1822 if (clip_scan == NULL || clip_scan[col] == 255) { |
| 1823 *dest_scan++ = gray; | 1823 *dest_scan++ = gray; |
| 1824 *dest_alpha_scan++ = 255; | 1824 *dest_alpha_scan++ = 255; |
| 1825 continue; | 1825 continue; |
| 1826 } | 1826 } |
| 1827 int src_alpha = clip_scan[col]; | 1827 int src_alpha = clip_scan[col]; |
| 1828 if (src_alpha == 0) { | 1828 if (src_alpha == 0) { |
| 1829 dest_scan ++; | 1829 dest_scan ++; |
| 1830 dest_alpha_scan ++; | 1830 dest_alpha_scan ++; |
| 1831 continue; | 1831 continue; |
| 1832 } | 1832 } |
| 1833 int back_alpha = *dest_alpha_scan; | 1833 int back_alpha = *dest_alpha_scan; |
| 1834 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; | 1834 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_a
lpha / 255; |
| 1835 *dest_alpha_scan ++ = dest_alpha; | 1835 *dest_alpha_scan ++ = dest_alpha; |
| 1836 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1836 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1837 if (bNonseparableBlend) { | 1837 if (bNonseparableBlend) { |
| 1838 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; | 1838 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray
: *dest_scan; |
| 1839 } | 1839 } |
| 1840 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); | 1840 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *
dest_scan, gray); |
| 1841 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1841 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1842 dest_scan ++; | 1842 dest_scan ++; |
| 1843 } | 1843 } |
| 1844 return; | 1844 return; |
| 1845 } | 1845 } |
| 1846 for (int col = 0; col < pixel_count; col ++) { | 1846 for (int col = 0; col < pixel_count; col ++) { |
| 1847 FX_BYTE gray = pPalette[*src_scan]; | 1847 uint8_t gray = pPalette[*src_scan]; |
| 1848 src_scan ++; | 1848 src_scan ++; |
| 1849 if (clip_scan == NULL || clip_scan[col] == 255) { | 1849 if (clip_scan == NULL || clip_scan[col] == 255) { |
| 1850 *dest_scan++ = gray; | 1850 *dest_scan++ = gray; |
| 1851 *dest_alpha_scan++ = 255; | 1851 *dest_alpha_scan++ = 255; |
| 1852 continue; | 1852 continue; |
| 1853 } | 1853 } |
| 1854 int src_alpha = clip_scan[col]; | 1854 int src_alpha = clip_scan[col]; |
| 1855 if (src_alpha == 0) { | 1855 if (src_alpha == 0) { |
| 1856 dest_scan ++; | 1856 dest_scan ++; |
| 1857 dest_alpha_scan ++; | 1857 dest_alpha_scan ++; |
| 1858 continue; | 1858 continue; |
| 1859 } | 1859 } |
| 1860 int back_alpha = *dest_alpha_scan; | 1860 int back_alpha = *dest_alpha_scan; |
| 1861 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1861 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1862 *dest_alpha_scan ++ = dest_alpha; | 1862 *dest_alpha_scan ++ = dest_alpha; |
| 1863 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1863 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1864 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1864 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1865 dest_scan ++; | 1865 dest_scan ++; |
| 1866 } | 1866 } |
| 1867 } | 1867 } |
| 1868 } | 1868 } |
| 1869 inline void _CompositeRow_1bppPal2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan,
int src_left, | 1869 inline void _CompositeRow_1bppPal2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan,
int src_left, |
| 1870 FX_LPCBYTE pPalette, int pixel_count, int
blend_type, FX_LPCBYTE clip_scan) | 1870 FX_LPCBYTE pPalette, int pixel_count, int
blend_type, FX_LPCBYTE clip_scan) |
| 1871 { | 1871 { |
| 1872 int reset_gray = pPalette[0]; | 1872 int reset_gray = pPalette[0]; |
| 1873 int set_gray = pPalette[1]; | 1873 int set_gray = pPalette[1]; |
| 1874 if (blend_type) { | 1874 if (blend_type) { |
| 1875 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1875 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1876 int blended_color; | 1876 int blended_color; |
| 1877 for (int col = 0; col < pixel_count; col ++) { | 1877 for (int col = 0; col < pixel_count; col ++) { |
| 1878 FX_BYTE gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + s
rc_left) % 8))) ? set_gray : reset_gray; | 1878 uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + s
rc_left) % 8))) ? set_gray : reset_gray; |
| 1879 if (bNonseparableBlend) { | 1879 if (bNonseparableBlend) { |
| 1880 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; | 1880 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; |
| 1881 } | 1881 } |
| 1882 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); | 1882 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); |
| 1883 if (clip_scan && clip_scan[col] < 255) { | 1883 if (clip_scan && clip_scan[col] < 255) { |
| 1884 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col])
; | 1884 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col])
; |
| 1885 } else { | 1885 } else { |
| 1886 *dest_scan = gray; | 1886 *dest_scan = gray; |
| 1887 } | 1887 } |
| 1888 dest_scan ++; | 1888 dest_scan ++; |
| 1889 } | 1889 } |
| 1890 return; | 1890 return; |
| 1891 } | 1891 } |
| 1892 for (int col = 0; col < pixel_count; col ++) { | 1892 for (int col = 0; col < pixel_count; col ++) { |
| 1893 FX_BYTE gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_l
eft) % 8))) ? set_gray : reset_gray; | 1893 uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_l
eft) % 8))) ? set_gray : reset_gray; |
| 1894 if (clip_scan && clip_scan[col] < 255) { | 1894 if (clip_scan && clip_scan[col] < 255) { |
| 1895 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]); | 1895 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, clip_scan[col]); |
| 1896 } else { | 1896 } else { |
| 1897 *dest_scan = gray; | 1897 *dest_scan = gray; |
| 1898 } | 1898 } |
| 1899 dest_scan ++; | 1899 dest_scan ++; |
| 1900 } | 1900 } |
| 1901 } | 1901 } |
| 1902 inline void _CompositeRow_1bppPal2Graya(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, int src_left, | 1902 inline void _CompositeRow_1bppPal2Graya(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, int src_left, |
| 1903 FX_LPCBYTE pPalette, int pixel_count, in
t blend_type, FX_LPCBYTE clip_scan, | 1903 FX_LPCBYTE pPalette, int pixel_count, in
t blend_type, FX_LPCBYTE clip_scan, |
| 1904 FX_LPBYTE dest_alpha_scan) | 1904 FX_LPBYTE dest_alpha_scan) |
| 1905 { | 1905 { |
| 1906 int reset_gray = pPalette[0]; | 1906 int reset_gray = pPalette[0]; |
| 1907 int set_gray = pPalette[1]; | 1907 int set_gray = pPalette[1]; |
| 1908 if (blend_type) { | 1908 if (blend_type) { |
| 1909 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1909 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 1910 int blended_color; | 1910 int blended_color; |
| 1911 for (int col = 0; col < pixel_count; col ++) { | 1911 for (int col = 0; col < pixel_count; col ++) { |
| 1912 FX_BYTE gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + s
rc_left) % 8))) ? set_gray : reset_gray; | 1912 uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + s
rc_left) % 8))) ? set_gray : reset_gray; |
| 1913 if (clip_scan == NULL || clip_scan[col] == 255) { | 1913 if (clip_scan == NULL || clip_scan[col] == 255) { |
| 1914 *dest_scan++ = gray; | 1914 *dest_scan++ = gray; |
| 1915 *dest_alpha_scan ++ = 255; | 1915 *dest_alpha_scan ++ = 255; |
| 1916 continue; | 1916 continue; |
| 1917 } | 1917 } |
| 1918 int src_alpha = clip_scan[col]; | 1918 int src_alpha = clip_scan[col]; |
| 1919 if (src_alpha == 0) { | 1919 if (src_alpha == 0) { |
| 1920 dest_scan ++; | 1920 dest_scan ++; |
| 1921 dest_alpha_scan ++; | 1921 dest_alpha_scan ++; |
| 1922 continue; | 1922 continue; |
| 1923 } | 1923 } |
| 1924 int back_alpha = *dest_alpha_scan; | 1924 int back_alpha = *dest_alpha_scan; |
| 1925 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 1925 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 1926 *dest_alpha_scan ++ = dest_alpha; | 1926 *dest_alpha_scan ++ = dest_alpha; |
| 1927 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1927 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1928 if (bNonseparableBlend) { | 1928 if (bNonseparableBlend) { |
| 1929 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; | 1929 blended_color = blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *d
est_scan; |
| 1930 } | 1930 } |
| 1931 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); | 1931 gray = bNonseparableBlend ? blended_color : _BLEND(blend_type, *dest
_scan, gray); |
| 1932 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1932 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1933 dest_scan ++; | 1933 dest_scan ++; |
| 1934 } | 1934 } |
| 1935 return; | 1935 return; |
| 1936 } | 1936 } |
| 1937 for (int col = 0; col < pixel_count; col ++) { | 1937 for (int col = 0; col < pixel_count; col ++) { |
| 1938 FX_BYTE gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_l
eft) % 8))) ? set_gray : reset_gray; | 1938 uint8_t gray = (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_l
eft) % 8))) ? set_gray : reset_gray; |
| 1939 if (clip_scan == NULL || clip_scan[col] == 255) { | 1939 if (clip_scan == NULL || clip_scan[col] == 255) { |
| 1940 *dest_scan++ = gray; | 1940 *dest_scan++ = gray; |
| 1941 *dest_alpha_scan ++ = 255; | 1941 *dest_alpha_scan ++ = 255; |
| 1942 continue; | 1942 continue; |
| 1943 } | 1943 } |
| 1944 int src_alpha = clip_scan[col]; | 1944 int src_alpha = clip_scan[col]; |
| 1945 if (src_alpha == 0) { | 1945 if (src_alpha == 0) { |
| 1946 dest_scan ++; | 1946 dest_scan ++; |
| 1947 dest_alpha_scan ++; | 1947 dest_alpha_scan ++; |
| 1948 continue; | 1948 continue; |
| 1949 } | 1949 } |
| 1950 int back_alpha = *dest_alpha_scan; | 1950 int back_alpha = *dest_alpha_scan; |
| 1951 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 1951 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 1952 *dest_alpha_scan ++ = dest_alpha; | 1952 *dest_alpha_scan ++ = dest_alpha; |
| 1953 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1953 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 1954 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1954 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
| 1955 dest_scan ++; | 1955 dest_scan ++; |
| 1956 } | 1956 } |
| 1957 } | 1957 } |
| 1958 inline void _CompositeRow_8bppRgb2Rgb_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, FX_DWORD* pPalette, int pixel_count, | 1958 inline void _CompositeRow_8bppRgb2Rgb_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, FX_DWORD* pPalette, int pixel_count, |
| 1959 int DestBpp, FX_LPCBYTE clip_scan, | 1959 int DestBpp, FX_LPCBYTE clip_scan, |
| 1960 FX_LPCBYTE src_alpha_scan) | 1960 FX_LPCBYTE src_alpha_scan) |
| 1961 { | 1961 { |
| 1962 if (src_alpha_scan) { | 1962 if (src_alpha_scan) { |
| 1963 int dest_gap = DestBpp - 3; | 1963 int dest_gap = DestBpp - 3; |
| 1964 FX_ARGB argb = 0; | 1964 FX_ARGB argb = 0; |
| 1965 for (int col = 0; col < pixel_count; col ++) { | 1965 for (int col = 0; col < pixel_count; col ++) { |
| 1966 argb = pPalette[*src_scan]; | 1966 argb = pPalette[*src_scan]; |
| 1967 int src_r = FXARGB_R(argb); | 1967 int src_r = FXARGB_R(argb); |
| 1968 int src_g = FXARGB_G(argb); | 1968 int src_g = FXARGB_G(argb); |
| 1969 int src_b = FXARGB_B(argb); | 1969 int src_b = FXARGB_B(argb); |
| 1970 src_scan ++; | 1970 src_scan ++; |
| 1971 FX_BYTE src_alpha = 0; | 1971 uint8_t src_alpha = 0; |
| 1972 if (clip_scan) { | 1972 if (clip_scan) { |
| 1973 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; | 1973 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; |
| 1974 } else { | 1974 } else { |
| 1975 src_alpha = *src_alpha_scan++; | 1975 src_alpha = *src_alpha_scan++; |
| 1976 } | 1976 } |
| 1977 if (src_alpha == 255) { | 1977 if (src_alpha == 255) { |
| 1978 *dest_scan++ = src_b; | 1978 *dest_scan++ = src_b; |
| 1979 *dest_scan++ = src_g; | 1979 *dest_scan++ = src_g; |
| 1980 *dest_scan++ = src_r; | 1980 *dest_scan++ = src_r; |
| 1981 dest_scan += dest_gap; | 1981 dest_scan += dest_gap; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2062 FX_DWORD* pPalette, FX_LPCBYTE clip_scan, | 2062 FX_DWORD* pPalette, FX_LPCBYTE clip_scan, |
| 2063 FX_LPCBYTE src_alpha_scan) | 2063 FX_LPCBYTE src_alpha_scan) |
| 2064 { | 2064 { |
| 2065 if (src_alpha_scan) { | 2065 if (src_alpha_scan) { |
| 2066 for (int col = 0; col < width; col ++) { | 2066 for (int col = 0; col < width; col ++) { |
| 2067 FX_ARGB argb = pPalette[*src_scan]; | 2067 FX_ARGB argb = pPalette[*src_scan]; |
| 2068 src_scan ++; | 2068 src_scan ++; |
| 2069 int src_r = FXARGB_R(argb); | 2069 int src_r = FXARGB_R(argb); |
| 2070 int src_g = FXARGB_G(argb); | 2070 int src_g = FXARGB_G(argb); |
| 2071 int src_b = FXARGB_B(argb); | 2071 int src_b = FXARGB_B(argb); |
| 2072 FX_BYTE back_alpha = dest_scan[3]; | 2072 uint8_t back_alpha = dest_scan[3]; |
| 2073 if (back_alpha == 0) { | 2073 if (back_alpha == 0) { |
| 2074 if (clip_scan) { | 2074 if (clip_scan) { |
| 2075 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255; | 2075 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255; |
| 2076 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); | 2076 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); |
| 2077 } else { | 2077 } else { |
| 2078 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(*src_alpha_scan, src_r,
src_g, src_b)); | 2078 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(*src_alpha_scan, src_r,
src_g, src_b)); |
| 2079 } | 2079 } |
| 2080 dest_scan += 4; | 2080 dest_scan += 4; |
| 2081 src_alpha_scan ++; | 2081 src_alpha_scan ++; |
| 2082 continue; | 2082 continue; |
| 2083 } | 2083 } |
| 2084 FX_BYTE src_alpha; | 2084 uint8_t src_alpha; |
| 2085 if (clip_scan == NULL) { | 2085 if (clip_scan == NULL) { |
| 2086 src_alpha = *src_alpha_scan ++; | 2086 src_alpha = *src_alpha_scan ++; |
| 2087 } else { | 2087 } else { |
| 2088 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | 2088 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 2089 } | 2089 } |
| 2090 if (src_alpha == 0) { | 2090 if (src_alpha == 0) { |
| 2091 dest_scan += 4; | 2091 dest_scan += 4; |
| 2092 continue; | 2092 continue; |
| 2093 } | 2093 } |
| 2094 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 2094 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 2095 dest_scan[3] = dest_alpha; | 2095 dest_scan[3] = dest_alpha; |
| 2096 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2096 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2097 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2097 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2098 dest_scan ++; | 2098 dest_scan ++; |
| 2099 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2099 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2100 dest_scan ++; | 2100 dest_scan ++; |
| 2101 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2101 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2102 dest_scan ++; | 2102 dest_scan ++; |
| 2103 dest_scan ++; | 2103 dest_scan ++; |
| 2104 } | 2104 } |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2116 src_scan ++; | 2116 src_scan ++; |
| 2117 continue; | 2117 continue; |
| 2118 } | 2118 } |
| 2119 int src_alpha = clip_scan[col]; | 2119 int src_alpha = clip_scan[col]; |
| 2120 if (src_alpha == 0) { | 2120 if (src_alpha == 0) { |
| 2121 dest_scan += 4; | 2121 dest_scan += 4; |
| 2122 src_scan ++; | 2122 src_scan ++; |
| 2123 continue; | 2123 continue; |
| 2124 } | 2124 } |
| 2125 int back_alpha = dest_scan[3]; | 2125 int back_alpha = dest_scan[3]; |
| 2126 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 2126 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 2127 dest_scan[3] = dest_alpha; | 2127 dest_scan[3] = dest_alpha; |
| 2128 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2128 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2129 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2129 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2130 dest_scan ++; | 2130 dest_scan ++; |
| 2131 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2131 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2132 dest_scan ++; | 2132 dest_scan ++; |
| 2133 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2133 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2134 dest_scan ++; | 2134 dest_scan ++; |
| 2135 dest_scan ++; | 2135 dest_scan ++; |
| 2136 src_scan ++; | 2136 src_scan ++; |
| 2137 } | 2137 } |
| 2138 } | 2138 } |
| 2139 void _CompositeRow_8bppRgb2Rgba_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, int width, | 2139 void _CompositeRow_8bppRgb2Rgba_NoBlend(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan
, int width, |
| 2140 FX_DWORD* pPalette, FX_LPCBYTE clip_scan
, | 2140 FX_DWORD* pPalette, FX_LPCBYTE clip_scan
, |
| 2141 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE sr
c_alpha_scan) | 2141 FX_LPBYTE dest_alpha_scan, FX_LPCBYTE sr
c_alpha_scan) |
| 2142 { | 2142 { |
| 2143 if (src_alpha_scan) { | 2143 if (src_alpha_scan) { |
| 2144 for (int col = 0; col < width; col ++) { | 2144 for (int col = 0; col < width; col ++) { |
| 2145 FX_ARGB argb = pPalette[*src_scan]; | 2145 FX_ARGB argb = pPalette[*src_scan]; |
| 2146 src_scan ++; | 2146 src_scan ++; |
| 2147 int src_r = FXARGB_R(argb); | 2147 int src_r = FXARGB_R(argb); |
| 2148 int src_g = FXARGB_G(argb); | 2148 int src_g = FXARGB_G(argb); |
| 2149 int src_b = FXARGB_B(argb); | 2149 int src_b = FXARGB_B(argb); |
| 2150 FX_BYTE back_alpha = *dest_alpha_scan; | 2150 uint8_t back_alpha = *dest_alpha_scan; |
| 2151 if (back_alpha == 0) { | 2151 if (back_alpha == 0) { |
| 2152 if (clip_scan) { | 2152 if (clip_scan) { |
| 2153 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255; | 2153 int src_alpha = clip_scan[col] * (*src_alpha_scan) / 255; |
| 2154 *dest_alpha_scan ++ = src_alpha; | 2154 *dest_alpha_scan ++ = src_alpha; |
| 2155 } else { | 2155 } else { |
| 2156 *dest_alpha_scan ++ = *src_alpha_scan; | 2156 *dest_alpha_scan ++ = *src_alpha_scan; |
| 2157 } | 2157 } |
| 2158 *dest_scan ++ = src_b; | 2158 *dest_scan ++ = src_b; |
| 2159 *dest_scan ++ = src_g; | 2159 *dest_scan ++ = src_g; |
| 2160 *dest_scan ++ = src_r; | 2160 *dest_scan ++ = src_r; |
| 2161 src_alpha_scan ++; | 2161 src_alpha_scan ++; |
| 2162 continue; | 2162 continue; |
| 2163 } | 2163 } |
| 2164 FX_BYTE src_alpha; | 2164 uint8_t src_alpha; |
| 2165 if (clip_scan == NULL) { | 2165 if (clip_scan == NULL) { |
| 2166 src_alpha = *src_alpha_scan++; | 2166 src_alpha = *src_alpha_scan++; |
| 2167 } else { | 2167 } else { |
| 2168 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | 2168 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 2169 } | 2169 } |
| 2170 if (src_alpha == 0) { | 2170 if (src_alpha == 0) { |
| 2171 dest_scan += 3; | 2171 dest_scan += 3; |
| 2172 dest_alpha_scan ++; | 2172 dest_alpha_scan ++; |
| 2173 continue; | 2173 continue; |
| 2174 } | 2174 } |
| 2175 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 2175 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 2176 *dest_alpha_scan ++ = dest_alpha; | 2176 *dest_alpha_scan ++ = dest_alpha; |
| 2177 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2177 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2178 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2178 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2179 dest_scan ++; | 2179 dest_scan ++; |
| 2180 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2180 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2181 dest_scan ++; | 2181 dest_scan ++; |
| 2182 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2182 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2183 dest_scan ++; | 2183 dest_scan ++; |
| 2184 } | 2184 } |
| 2185 } else | 2185 } else |
| (...skipping 11 matching lines...) Expand all Loading... |
| 2197 continue; | 2197 continue; |
| 2198 } | 2198 } |
| 2199 int src_alpha = clip_scan[col]; | 2199 int src_alpha = clip_scan[col]; |
| 2200 if (src_alpha == 0) { | 2200 if (src_alpha == 0) { |
| 2201 dest_scan += 3; | 2201 dest_scan += 3; |
| 2202 dest_alpha_scan ++; | 2202 dest_alpha_scan ++; |
| 2203 src_scan ++; | 2203 src_scan ++; |
| 2204 continue; | 2204 continue; |
| 2205 } | 2205 } |
| 2206 int back_alpha = *dest_alpha_scan; | 2206 int back_alpha = *dest_alpha_scan; |
| 2207 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; | 2207 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha
/ 255; |
| 2208 *dest_alpha_scan ++ = dest_alpha; | 2208 *dest_alpha_scan ++ = dest_alpha; |
| 2209 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2209 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2210 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2210 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2211 dest_scan ++; | 2211 dest_scan ++; |
| 2212 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2212 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2213 dest_scan ++; | 2213 dest_scan ++; |
| 2214 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2214 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2215 dest_scan ++; | 2215 dest_scan ++; |
| 2216 src_scan ++; | 2216 src_scan ++; |
| 2217 } | 2217 } |
| (...skipping 26 matching lines...) Expand all Loading... |
| 2244 *dest_scan++ = src_r; | 2244 *dest_scan++ = src_r; |
| 2245 *dest_scan++ = 255; | 2245 *dest_scan++ = 255; |
| 2246 continue; | 2246 continue; |
| 2247 } | 2247 } |
| 2248 int src_alpha = clip_scan[col]; | 2248 int src_alpha = clip_scan[col]; |
| 2249 if (src_alpha == 0) { | 2249 if (src_alpha == 0) { |
| 2250 dest_scan += 4; | 2250 dest_scan += 4; |
| 2251 continue; | 2251 continue; |
| 2252 } | 2252 } |
| 2253 int back_alpha = dest_scan[3]; | 2253 int back_alpha = dest_scan[3]; |
| 2254 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2254 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2255 dest_scan[3] = dest_alpha; | 2255 dest_scan[3] = dest_alpha; |
| 2256 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2256 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2257 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2257 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2258 dest_scan ++; | 2258 dest_scan ++; |
| 2259 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2259 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2260 dest_scan ++; | 2260 dest_scan ++; |
| 2261 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2261 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2262 dest_scan ++; | 2262 dest_scan ++; |
| 2263 dest_scan ++; | 2263 dest_scan ++; |
| 2264 } | 2264 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 2293 *dest_alpha_scan++ = 255; | 2293 *dest_alpha_scan++ = 255; |
| 2294 continue; | 2294 continue; |
| 2295 } | 2295 } |
| 2296 int src_alpha = clip_scan[col]; | 2296 int src_alpha = clip_scan[col]; |
| 2297 if (src_alpha == 0) { | 2297 if (src_alpha == 0) { |
| 2298 dest_scan += 3; | 2298 dest_scan += 3; |
| 2299 dest_alpha_scan ++; | 2299 dest_alpha_scan ++; |
| 2300 continue; | 2300 continue; |
| 2301 } | 2301 } |
| 2302 int back_alpha = *dest_alpha_scan; | 2302 int back_alpha = *dest_alpha_scan; |
| 2303 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2303 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2304 *dest_alpha_scan ++ = dest_alpha; | 2304 *dest_alpha_scan ++ = dest_alpha; |
| 2305 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2305 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2306 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2306 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
| 2307 dest_scan ++; | 2307 dest_scan ++; |
| 2308 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2308 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
| 2309 dest_scan ++; | 2309 dest_scan ++; |
| 2310 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2310 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
| 2311 dest_scan ++; | 2311 dest_scan ++; |
| 2312 } | 2312 } |
| 2313 } | 2313 } |
| 2314 void _CompositeRow_ByteMask2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int src_r, int src_g, int src_b, int pixel_count, | 2314 void _CompositeRow_ByteMask2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int src_r, int src_g, int src_b, int pixel_count, |
| 2315 int blend_type, FX_LPCBYTE clip_scan) | 2315 int blend_type, FX_LPCBYTE clip_scan) |
| 2316 { | 2316 { |
| 2317 for (int col = 0; col < pixel_count; col ++) { | 2317 for (int col = 0; col < pixel_count; col ++) { |
| 2318 int src_alpha; | 2318 int src_alpha; |
| 2319 if (clip_scan) { | 2319 if (clip_scan) { |
| 2320 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2320 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2321 } else { | 2321 } else { |
| 2322 src_alpha = mask_alpha * src_scan[col] / 255; | 2322 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2323 } | 2323 } |
| 2324 FX_BYTE back_alpha = dest_scan[3]; | 2324 uint8_t back_alpha = dest_scan[3]; |
| 2325 if (back_alpha == 0) { | 2325 if (back_alpha == 0) { |
| 2326 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)
); | 2326 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)
); |
| 2327 dest_scan += 4; | 2327 dest_scan += 4; |
| 2328 continue; | 2328 continue; |
| 2329 } | 2329 } |
| 2330 if (src_alpha == 0) { | 2330 if (src_alpha == 0) { |
| 2331 dest_scan += 4; | 2331 dest_scan += 4; |
| 2332 continue; | 2332 continue; |
| 2333 } | 2333 } |
| 2334 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2334 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2335 dest_scan[3] = dest_alpha; | 2335 dest_scan[3] = dest_alpha; |
| 2336 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2336 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2337 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2337 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2338 int blended_colors[3]; | 2338 int blended_colors[3]; |
| 2339 FX_BYTE src_scan[3]; | 2339 uint8_t src_scan[3]; |
| 2340 src_scan[0] = src_b; | 2340 src_scan[0] = src_b; |
| 2341 src_scan[1] = src_g; | 2341 src_scan[1] = src_g; |
| 2342 src_scan[2] = src_r; | 2342 src_scan[2] = src_r; |
| 2343 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2343 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2344 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); | 2344 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); |
| 2345 dest_scan ++; | 2345 dest_scan ++; |
| 2346 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); | 2346 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); |
| 2347 dest_scan ++; | 2347 dest_scan ++; |
| 2348 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); | 2348 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); |
| 2349 } else if (blend_type) { | 2349 } else if (blend_type) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2372 int blend_type, FX_LPCBYTE clip_scan, | 2372 int blend_type, FX_LPCBYTE clip_scan, |
| 2373 FX_LPBYTE dest_alpha_scan) | 2373 FX_LPBYTE dest_alpha_scan) |
| 2374 { | 2374 { |
| 2375 for (int col = 0; col < pixel_count; col ++) { | 2375 for (int col = 0; col < pixel_count; col ++) { |
| 2376 int src_alpha; | 2376 int src_alpha; |
| 2377 if (clip_scan) { | 2377 if (clip_scan) { |
| 2378 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2378 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2379 } else { | 2379 } else { |
| 2380 src_alpha = mask_alpha * src_scan[col] / 255; | 2380 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2381 } | 2381 } |
| 2382 FX_BYTE back_alpha = *dest_alpha_scan; | 2382 uint8_t back_alpha = *dest_alpha_scan; |
| 2383 if (back_alpha == 0) { | 2383 if (back_alpha == 0) { |
| 2384 *dest_scan ++ = src_b; | 2384 *dest_scan ++ = src_b; |
| 2385 *dest_scan ++ = src_g; | 2385 *dest_scan ++ = src_g; |
| 2386 *dest_scan ++ = src_r; | 2386 *dest_scan ++ = src_r; |
| 2387 *dest_alpha_scan ++ = src_alpha; | 2387 *dest_alpha_scan ++ = src_alpha; |
| 2388 continue; | 2388 continue; |
| 2389 } | 2389 } |
| 2390 if (src_alpha == 0) { | 2390 if (src_alpha == 0) { |
| 2391 dest_scan += 3; | 2391 dest_scan += 3; |
| 2392 dest_alpha_scan ++; | 2392 dest_alpha_scan ++; |
| 2393 continue; | 2393 continue; |
| 2394 } | 2394 } |
| 2395 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2395 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2396 *dest_alpha_scan ++ = dest_alpha; | 2396 *dest_alpha_scan ++ = dest_alpha; |
| 2397 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2397 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2398 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2398 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2399 int blended_colors[3]; | 2399 int blended_colors[3]; |
| 2400 FX_BYTE src_scan[3]; | 2400 uint8_t src_scan[3]; |
| 2401 src_scan[0] = src_b; | 2401 src_scan[0] = src_b; |
| 2402 src_scan[1] = src_g; | 2402 src_scan[1] = src_g; |
| 2403 src_scan[2] = src_r; | 2403 src_scan[2] = src_r; |
| 2404 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2404 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2405 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); | 2405 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); |
| 2406 dest_scan ++; | 2406 dest_scan ++; |
| 2407 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); | 2407 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); |
| 2408 dest_scan ++; | 2408 dest_scan ++; |
| 2409 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); | 2409 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); |
| 2410 dest_scan ++; | 2410 dest_scan ++; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2440 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2440 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2441 } else { | 2441 } else { |
| 2442 src_alpha = mask_alpha * src_scan[col] / 255; | 2442 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2443 } | 2443 } |
| 2444 if (src_alpha == 0) { | 2444 if (src_alpha == 0) { |
| 2445 dest_scan += Bpp; | 2445 dest_scan += Bpp; |
| 2446 continue; | 2446 continue; |
| 2447 } | 2447 } |
| 2448 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2448 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2449 int blended_colors[3]; | 2449 int blended_colors[3]; |
| 2450 FX_BYTE src_scan[3]; | 2450 uint8_t src_scan[3]; |
| 2451 src_scan[0] = src_b; | 2451 src_scan[0] = src_b; |
| 2452 src_scan[1] = src_g; | 2452 src_scan[1] = src_g; |
| 2453 src_scan[2] = src_r; | 2453 src_scan[2] = src_r; |
| 2454 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2454 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2455 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_al
pha); | 2455 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_al
pha); |
| 2456 dest_scan ++; | 2456 dest_scan ++; |
| 2457 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_al
pha); | 2457 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_al
pha); |
| 2458 dest_scan ++; | 2458 dest_scan ++; |
| 2459 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_al
pha); | 2459 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_al
pha); |
| 2460 } else if (blend_type) { | 2460 } else if (blend_type) { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 2479 void _CompositeRow_ByteMask2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int pixel_count, | 2479 void _CompositeRow_ByteMask2Mask(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int pixel_count, |
| 2480 FX_LPCBYTE clip_scan) | 2480 FX_LPCBYTE clip_scan) |
| 2481 { | 2481 { |
| 2482 for (int col = 0; col < pixel_count; col ++) { | 2482 for (int col = 0; col < pixel_count; col ++) { |
| 2483 int src_alpha; | 2483 int src_alpha; |
| 2484 if (clip_scan) { | 2484 if (clip_scan) { |
| 2485 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2485 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2486 } else { | 2486 } else { |
| 2487 src_alpha = mask_alpha * src_scan[col] / 255; | 2487 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2488 } | 2488 } |
| 2489 FX_BYTE back_alpha = *dest_scan; | 2489 uint8_t back_alpha = *dest_scan; |
| 2490 if (!back_alpha) { | 2490 if (!back_alpha) { |
| 2491 *dest_scan = src_alpha; | 2491 *dest_scan = src_alpha; |
| 2492 } else if (src_alpha) { | 2492 } else if (src_alpha) { |
| 2493 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2493 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2494 } | 2494 } |
| 2495 dest_scan ++; | 2495 dest_scan ++; |
| 2496 } | 2496 } |
| 2497 } | 2497 } |
| 2498 void _CompositeRow_ByteMask2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int src_gray, | 2498 void _CompositeRow_ByteMask2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int m
ask_alpha, int src_gray, |
| 2499 int pixel_count, FX_LPCBYTE clip_scan) | 2499 int pixel_count, FX_LPCBYTE clip_scan) |
| (...skipping 15 matching lines...) Expand all Loading... |
| 2515 int pixel_count, FX_LPCBYTE clip_scan, | 2515 int pixel_count, FX_LPCBYTE clip_scan, |
| 2516 FX_LPBYTE dest_alpha_scan) | 2516 FX_LPBYTE dest_alpha_scan) |
| 2517 { | 2517 { |
| 2518 for (int col = 0; col < pixel_count; col ++) { | 2518 for (int col = 0; col < pixel_count; col ++) { |
| 2519 int src_alpha; | 2519 int src_alpha; |
| 2520 if (clip_scan) { | 2520 if (clip_scan) { |
| 2521 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 2521 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 2522 } else { | 2522 } else { |
| 2523 src_alpha = mask_alpha * src_scan[col] / 255; | 2523 src_alpha = mask_alpha * src_scan[col] / 255; |
| 2524 } | 2524 } |
| 2525 FX_BYTE back_alpha = *dest_alpha_scan; | 2525 uint8_t back_alpha = *dest_alpha_scan; |
| 2526 if (back_alpha == 0) { | 2526 if (back_alpha == 0) { |
| 2527 *dest_scan ++ = src_gray; | 2527 *dest_scan ++ = src_gray; |
| 2528 *dest_alpha_scan ++ = src_alpha; | 2528 *dest_alpha_scan ++ = src_alpha; |
| 2529 continue; | 2529 continue; |
| 2530 } | 2530 } |
| 2531 if (src_alpha == 0) { | 2531 if (src_alpha == 0) { |
| 2532 dest_scan ++; | 2532 dest_scan ++; |
| 2533 dest_alpha_scan ++; | 2533 dest_alpha_scan ++; |
| 2534 continue; | 2534 continue; |
| 2535 } | 2535 } |
| 2536 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2536 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2537 *dest_alpha_scan++ = dest_alpha; | 2537 *dest_alpha_scan++ = dest_alpha; |
| 2538 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2538 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2539 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); | 2539 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); |
| 2540 dest_scan ++; | 2540 dest_scan ++; |
| 2541 } | 2541 } |
| 2542 } | 2542 } |
| 2543 void _CompositeRow_BitMask2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int ma
sk_alpha, int src_r, int src_g, int src_b, | 2543 void _CompositeRow_BitMask2Argb(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int ma
sk_alpha, int src_r, int src_g, int src_b, |
| 2544 int src_left, int pixel_count, int blend_type, F
X_LPCBYTE clip_scan) | 2544 int src_left, int pixel_count, int blend_type, F
X_LPCBYTE clip_scan) |
| 2545 { | 2545 { |
| 2546 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 2
55) { | 2546 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && mask_alpha == 2
55) { |
| (...skipping 10 matching lines...) Expand all Loading... |
| 2557 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { | 2557 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { |
| 2558 dest_scan += 4; | 2558 dest_scan += 4; |
| 2559 continue; | 2559 continue; |
| 2560 } | 2560 } |
| 2561 int src_alpha; | 2561 int src_alpha; |
| 2562 if (clip_scan) { | 2562 if (clip_scan) { |
| 2563 src_alpha = mask_alpha * clip_scan[col] / 255; | 2563 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2564 } else { | 2564 } else { |
| 2565 src_alpha = mask_alpha; | 2565 src_alpha = mask_alpha; |
| 2566 } | 2566 } |
| 2567 FX_BYTE back_alpha = dest_scan[3]; | 2567 uint8_t back_alpha = dest_scan[3]; |
| 2568 if (back_alpha == 0) { | 2568 if (back_alpha == 0) { |
| 2569 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)
); | 2569 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)
); |
| 2570 dest_scan += 4; | 2570 dest_scan += 4; |
| 2571 continue; | 2571 continue; |
| 2572 } | 2572 } |
| 2573 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2573 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2574 dest_scan[3] = dest_alpha; | 2574 dest_scan[3] = dest_alpha; |
| 2575 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2575 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2576 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2576 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2577 int blended_colors[3]; | 2577 int blended_colors[3]; |
| 2578 FX_BYTE src_scan[3]; | 2578 uint8_t src_scan[3]; |
| 2579 src_scan[0] = src_b; | 2579 src_scan[0] = src_b; |
| 2580 src_scan[1] = src_g; | 2580 src_scan[1] = src_g; |
| 2581 src_scan[2] = src_r; | 2581 src_scan[2] = src_r; |
| 2582 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2582 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2583 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); | 2583 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); |
| 2584 dest_scan ++; | 2584 dest_scan ++; |
| 2585 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); | 2585 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); |
| 2586 dest_scan ++; | 2586 dest_scan ++; |
| 2587 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); | 2587 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); |
| 2588 } else if (blend_type) { | 2588 } else if (blend_type) { |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2629 dest_scan += 3; | 2629 dest_scan += 3; |
| 2630 dest_alpha_scan ++; | 2630 dest_alpha_scan ++; |
| 2631 continue; | 2631 continue; |
| 2632 } | 2632 } |
| 2633 int src_alpha; | 2633 int src_alpha; |
| 2634 if (clip_scan) { | 2634 if (clip_scan) { |
| 2635 src_alpha = mask_alpha * clip_scan[col] / 255; | 2635 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2636 } else { | 2636 } else { |
| 2637 src_alpha = mask_alpha; | 2637 src_alpha = mask_alpha; |
| 2638 } | 2638 } |
| 2639 FX_BYTE back_alpha = dest_scan[3]; | 2639 uint8_t back_alpha = dest_scan[3]; |
| 2640 if (back_alpha == 0) { | 2640 if (back_alpha == 0) { |
| 2641 *dest_scan ++ = src_b; | 2641 *dest_scan ++ = src_b; |
| 2642 *dest_scan ++ = src_g; | 2642 *dest_scan ++ = src_g; |
| 2643 *dest_scan ++ = src_r; | 2643 *dest_scan ++ = src_r; |
| 2644 *dest_alpha_scan ++ = mask_alpha; | 2644 *dest_alpha_scan ++ = mask_alpha; |
| 2645 continue; | 2645 continue; |
| 2646 } | 2646 } |
| 2647 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2647 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2648 *dest_alpha_scan ++ = dest_alpha; | 2648 *dest_alpha_scan ++ = dest_alpha; |
| 2649 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2649 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2650 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2650 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2651 int blended_colors[3]; | 2651 int blended_colors[3]; |
| 2652 FX_BYTE src_scan[3]; | 2652 uint8_t src_scan[3]; |
| 2653 src_scan[0] = src_b; | 2653 src_scan[0] = src_b; |
| 2654 src_scan[1] = src_g; | 2654 src_scan[1] = src_g; |
| 2655 src_scan[2] = src_r; | 2655 src_scan[2] = src_r; |
| 2656 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2656 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2657 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); | 2657 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], alpha_
ratio); |
| 2658 dest_scan ++; | 2658 dest_scan ++; |
| 2659 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); | 2659 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], alpha_
ratio); |
| 2660 dest_scan ++; | 2660 dest_scan ++; |
| 2661 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); | 2661 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], alpha_
ratio); |
| 2662 dest_scan ++; | 2662 dest_scan ++; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2707 src_alpha = mask_alpha * clip_scan[col] / 255; | 2707 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2708 } else { | 2708 } else { |
| 2709 src_alpha = mask_alpha; | 2709 src_alpha = mask_alpha; |
| 2710 } | 2710 } |
| 2711 if (src_alpha == 0) { | 2711 if (src_alpha == 0) { |
| 2712 dest_scan += Bpp; | 2712 dest_scan += Bpp; |
| 2713 continue; | 2713 continue; |
| 2714 } | 2714 } |
| 2715 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 2715 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 2716 int blended_colors[3]; | 2716 int blended_colors[3]; |
| 2717 FX_BYTE src_scan[3]; | 2717 uint8_t src_scan[3]; |
| 2718 src_scan[0] = src_b; | 2718 src_scan[0] = src_b; |
| 2719 src_scan[1] = src_g; | 2719 src_scan[1] = src_g; |
| 2720 src_scan[2] = src_r; | 2720 src_scan[2] = src_r; |
| 2721 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 2721 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
| 2722 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_al
pha); | 2722 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[0], src_al
pha); |
| 2723 dest_scan ++; | 2723 dest_scan ++; |
| 2724 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_al
pha); | 2724 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[1], src_al
pha); |
| 2725 dest_scan ++; | 2725 dest_scan ++; |
| 2726 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_al
pha); | 2726 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended_colors[2], src_al
pha); |
| 2727 } else if (blend_type) { | 2727 } else if (blend_type) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 2750 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { | 2750 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { |
| 2751 dest_scan ++; | 2751 dest_scan ++; |
| 2752 continue; | 2752 continue; |
| 2753 } | 2753 } |
| 2754 int src_alpha; | 2754 int src_alpha; |
| 2755 if (clip_scan) { | 2755 if (clip_scan) { |
| 2756 src_alpha = mask_alpha * clip_scan[col] / 255; | 2756 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2757 } else { | 2757 } else { |
| 2758 src_alpha = mask_alpha; | 2758 src_alpha = mask_alpha; |
| 2759 } | 2759 } |
| 2760 FX_BYTE back_alpha = *dest_scan; | 2760 uint8_t back_alpha = *dest_scan; |
| 2761 if (!back_alpha) { | 2761 if (!back_alpha) { |
| 2762 *dest_scan = src_alpha; | 2762 *dest_scan = src_alpha; |
| 2763 } else if (src_alpha) { | 2763 } else if (src_alpha) { |
| 2764 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2764 *dest_scan = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
| 2765 } | 2765 } |
| 2766 dest_scan ++; | 2766 dest_scan ++; |
| 2767 } | 2767 } |
| 2768 } | 2768 } |
| 2769 void _CompositeRow_BitMask2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int ma
sk_alpha, int src_gray, | 2769 void _CompositeRow_BitMask2Gray(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int ma
sk_alpha, int src_gray, |
| 2770 int src_left, int pixel_count, FX_LPCBYTE clip_s
can) | 2770 int src_left, int pixel_count, FX_LPCBYTE clip_s
can) |
| (...skipping 24 matching lines...) Expand all Loading... |
| 2795 dest_scan ++; | 2795 dest_scan ++; |
| 2796 dest_alpha_scan ++; | 2796 dest_alpha_scan ++; |
| 2797 continue; | 2797 continue; |
| 2798 } | 2798 } |
| 2799 int src_alpha; | 2799 int src_alpha; |
| 2800 if (clip_scan) { | 2800 if (clip_scan) { |
| 2801 src_alpha = mask_alpha * clip_scan[col] / 255; | 2801 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 2802 } else { | 2802 } else { |
| 2803 src_alpha = mask_alpha; | 2803 src_alpha = mask_alpha; |
| 2804 } | 2804 } |
| 2805 FX_BYTE back_alpha = *dest_alpha_scan; | 2805 uint8_t back_alpha = *dest_alpha_scan; |
| 2806 if (back_alpha == 0) { | 2806 if (back_alpha == 0) { |
| 2807 *dest_scan ++ = src_gray; | 2807 *dest_scan ++ = src_gray; |
| 2808 *dest_alpha_scan ++ = src_alpha; | 2808 *dest_alpha_scan ++ = src_alpha; |
| 2809 continue; | 2809 continue; |
| 2810 } | 2810 } |
| 2811 if (src_alpha == 0) { | 2811 if (src_alpha == 0) { |
| 2812 dest_scan ++; | 2812 dest_scan ++; |
| 2813 dest_alpha_scan ++; | 2813 dest_alpha_scan ++; |
| 2814 continue; | 2814 continue; |
| 2815 } | 2815 } |
| 2816 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2816 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2817 *dest_alpha_scan++ = dest_alpha; | 2817 *dest_alpha_scan++ = dest_alpha; |
| 2818 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2818 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2819 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); | 2819 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_gray, alpha_ratio); |
| 2820 dest_scan ++; | 2820 dest_scan ++; |
| 2821 } | 2821 } |
| 2822 } | 2822 } |
| 2823 void _CompositeRow_Argb2Argb_RgbByteOrder(FX_LPBYTE dest_scan, FX_LPCBYTE src_sc
an, int pixel_count, int blend_type, FX_LPCBYTE clip_scan) | 2823 void _CompositeRow_Argb2Argb_RgbByteOrder(FX_LPBYTE dest_scan, FX_LPCBYTE src_sc
an, int pixel_count, int blend_type, FX_LPCBYTE clip_scan) |
| 2824 { | 2824 { |
| 2825 int blended_colors[3]; | 2825 int blended_colors[3]; |
| 2826 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2826 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 2827 for (int col = 0; col < pixel_count; col ++) { | 2827 for (int col = 0; col < pixel_count; col ++) { |
| 2828 FX_BYTE back_alpha = dest_scan[3]; | 2828 uint8_t back_alpha = dest_scan[3]; |
| 2829 if (back_alpha == 0) { | 2829 if (back_alpha == 0) { |
| 2830 if (clip_scan) { | 2830 if (clip_scan) { |
| 2831 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 2831 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 2832 dest_scan[3] = src_alpha; | 2832 dest_scan[3] = src_alpha; |
| 2833 dest_scan[0] = src_scan[2]; | 2833 dest_scan[0] = src_scan[2]; |
| 2834 dest_scan[1] = src_scan[1]; | 2834 dest_scan[1] = src_scan[1]; |
| 2835 dest_scan[2] = src_scan[0]; | 2835 dest_scan[2] = src_scan[0]; |
| 2836 } else { | 2836 } else { |
| 2837 FXARGB_RGBORDERCOPY(dest_scan, src_scan); | 2837 FXARGB_RGBORDERCOPY(dest_scan, src_scan); |
| 2838 } | 2838 } |
| 2839 dest_scan += 4; | 2839 dest_scan += 4; |
| 2840 src_scan += 4; | 2840 src_scan += 4; |
| 2841 continue; | 2841 continue; |
| 2842 } | 2842 } |
| 2843 FX_BYTE src_alpha; | 2843 uint8_t src_alpha; |
| 2844 if (clip_scan == NULL) { | 2844 if (clip_scan == NULL) { |
| 2845 src_alpha = src_scan[3]; | 2845 src_alpha = src_scan[3]; |
| 2846 } else { | 2846 } else { |
| 2847 src_alpha = clip_scan[col] * src_scan[3] / 255; | 2847 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 2848 } | 2848 } |
| 2849 if (src_alpha == 0) { | 2849 if (src_alpha == 0) { |
| 2850 dest_scan += 4; | 2850 dest_scan += 4; |
| 2851 src_scan += 4; | 2851 src_scan += 4; |
| 2852 continue; | 2852 continue; |
| 2853 } | 2853 } |
| 2854 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 2854 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 2855 dest_scan[3] = dest_alpha; | 2855 dest_scan[3] = dest_alpha; |
| 2856 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2856 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 2857 if (bNonseparableBlend) { | 2857 if (bNonseparableBlend) { |
| 2858 FX_BYTE dest_scan_o[3]; | 2858 uint8_t dest_scan_o[3]; |
| 2859 dest_scan_o[0] = dest_scan[2]; | 2859 dest_scan_o[0] = dest_scan[2]; |
| 2860 dest_scan_o[1] = dest_scan[1]; | 2860 dest_scan_o[1] = dest_scan[1]; |
| 2861 dest_scan_o[2] = dest_scan[0]; | 2861 dest_scan_o[2] = dest_scan[0]; |
| 2862 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 2862 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 2863 } | 2863 } |
| 2864 for (int color = 0; color < 3; color ++) { | 2864 for (int color = 0; color < 3; color ++) { |
| 2865 int index = 2 - color; | 2865 int index = 2 - color; |
| 2866 if (blend_type) { | 2866 if (blend_type) { |
| 2867 int blended = bNonseparableBlend ? blended_colors[color] : | 2867 int blended = bNonseparableBlend ? blended_colors[color] : |
| 2868 _BLEND(blend_type, dest_scan[index], *src_scan); | 2868 _BLEND(blend_type, dest_scan[index], *src_scan); |
| 2869 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha); | 2869 blended = FXDIB_ALPHA_MERGE(*src_scan, blended, back_alpha); |
| 2870 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended,
alpha_ratio); | 2870 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended,
alpha_ratio); |
| 2871 } else { | 2871 } else { |
| 2872 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], *src_scan
, alpha_ratio); | 2872 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], *src_scan
, alpha_ratio); |
| 2873 } | 2873 } |
| 2874 src_scan ++; | 2874 src_scan ++; |
| 2875 } | 2875 } |
| 2876 dest_scan += 4; | 2876 dest_scan += 4; |
| 2877 src_scan++; | 2877 src_scan++; |
| 2878 } | 2878 } |
| 2879 } | 2879 } |
| 2880 void _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(FX_LPBYTE dest_scan, FX_LP
CBYTE src_scan, int width, int blend_type, int src_Bpp) | 2880 void _CompositeRow_Rgb2Argb_Blend_NoClip_RgbByteOrder(FX_LPBYTE dest_scan, FX_LP
CBYTE src_scan, int width, int blend_type, int src_Bpp) |
| 2881 { | 2881 { |
| 2882 int blended_colors[3]; | 2882 int blended_colors[3]; |
| 2883 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2883 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 2884 int src_gap = src_Bpp - 3; | 2884 int src_gap = src_Bpp - 3; |
| 2885 for (int col = 0; col < width; col ++) { | 2885 for (int col = 0; col < width; col ++) { |
| 2886 FX_BYTE back_alpha = dest_scan[3]; | 2886 uint8_t back_alpha = dest_scan[3]; |
| 2887 if (back_alpha == 0) { | 2887 if (back_alpha == 0) { |
| 2888 if (src_Bpp == 4) { | 2888 if (src_Bpp == 4) { |
| 2889 FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_
scan)); | 2889 FXARGB_SETRGBORDERDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_
scan)); |
| 2890 } else { | 2890 } else { |
| 2891 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2],
src_scan[1], src_scan[0])); | 2891 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2],
src_scan[1], src_scan[0])); |
| 2892 } | 2892 } |
| 2893 dest_scan += 4; | 2893 dest_scan += 4; |
| 2894 src_scan += src_Bpp; | 2894 src_scan += src_Bpp; |
| 2895 continue; | 2895 continue; |
| 2896 } | 2896 } |
| 2897 dest_scan[3] = 0xff; | 2897 dest_scan[3] = 0xff; |
| 2898 if (bNonseparableBlend) { | 2898 if (bNonseparableBlend) { |
| 2899 FX_BYTE dest_scan_o[3]; | 2899 uint8_t dest_scan_o[3]; |
| 2900 dest_scan_o[0] = dest_scan[2]; | 2900 dest_scan_o[0] = dest_scan[2]; |
| 2901 dest_scan_o[1] = dest_scan[1]; | 2901 dest_scan_o[1] = dest_scan[1]; |
| 2902 dest_scan_o[2] = dest_scan[0]; | 2902 dest_scan_o[2] = dest_scan[0]; |
| 2903 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 2903 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 2904 } | 2904 } |
| 2905 for (int color = 0; color < 3; color ++) { | 2905 for (int color = 0; color < 3; color ++) { |
| 2906 int index = 2 - color; | 2906 int index = 2 - color; |
| 2907 int src_color = FX_GAMMA(*src_scan); | 2907 int src_color = FX_GAMMA(*src_scan); |
| 2908 int blended = bNonseparableBlend ? blended_colors[color] : | 2908 int blended = bNonseparableBlend ? blended_colors[color] : |
| 2909 _BLEND(blend_type, dest_scan[index], src_color); | 2909 _BLEND(blend_type, dest_scan[index], src_color); |
| 2910 dest_scan[index] = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha)
; | 2910 dest_scan[index] = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha)
; |
| 2911 src_scan ++; | 2911 src_scan ++; |
| 2912 } | 2912 } |
| 2913 dest_scan += 4; | 2913 dest_scan += 4; |
| 2914 src_scan += src_gap; | 2914 src_scan += src_gap; |
| 2915 } | 2915 } |
| 2916 } | 2916 } |
| 2917 inline void _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(FX_LPBYTE dest_scan, FX_LP
CBYTE src_scan, int width, int blend_type, int dest_Bpp, FX_LPCBYTE clip_scan) | 2917 inline void _CompositeRow_Argb2Rgb_Blend_RgbByteOrder(FX_LPBYTE dest_scan, FX_LP
CBYTE src_scan, int width, int blend_type, int dest_Bpp, FX_LPCBYTE clip_scan) |
| 2918 { | 2918 { |
| 2919 int blended_colors[3]; | 2919 int blended_colors[3]; |
| 2920 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2920 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 2921 for (int col = 0; col < width; col ++) { | 2921 for (int col = 0; col < width; col ++) { |
| 2922 FX_BYTE src_alpha; | 2922 uint8_t src_alpha; |
| 2923 if (clip_scan) { | 2923 if (clip_scan) { |
| 2924 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 2924 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 2925 } else { | 2925 } else { |
| 2926 src_alpha = src_scan[3]; | 2926 src_alpha = src_scan[3]; |
| 2927 } | 2927 } |
| 2928 if (src_alpha == 0) { | 2928 if (src_alpha == 0) { |
| 2929 dest_scan += dest_Bpp; | 2929 dest_scan += dest_Bpp; |
| 2930 src_scan += 4; | 2930 src_scan += 4; |
| 2931 continue; | 2931 continue; |
| 2932 } | 2932 } |
| 2933 if (bNonseparableBlend) { | 2933 if (bNonseparableBlend) { |
| 2934 FX_BYTE dest_scan_o[3]; | 2934 uint8_t dest_scan_o[3]; |
| 2935 dest_scan_o[0] = dest_scan[2]; | 2935 dest_scan_o[0] = dest_scan[2]; |
| 2936 dest_scan_o[1] = dest_scan[1]; | 2936 dest_scan_o[1] = dest_scan[1]; |
| 2937 dest_scan_o[2] = dest_scan[0]; | 2937 dest_scan_o[2] = dest_scan[0]; |
| 2938 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 2938 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 2939 } | 2939 } |
| 2940 for (int color = 0; color < 3; color ++) { | 2940 for (int color = 0; color < 3; color ++) { |
| 2941 int index = 2 - color; | 2941 int index = 2 - color; |
| 2942 int back_color = FX_GAMMA(dest_scan[index]); | 2942 int back_color = FX_GAMMA(dest_scan[index]); |
| 2943 int blended = bNonseparableBlend ? blended_colors[color] : | 2943 int blended = bNonseparableBlend ? blended_colors[color] : |
| 2944 _BLEND(blend_type, back_color, *src_scan); | 2944 _BLEND(blend_type, back_color, *src_scan); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 2961 src_scan += src_Bpp; | 2961 src_scan += src_Bpp; |
| 2962 } | 2962 } |
| 2963 } | 2963 } |
| 2964 inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp) | 2964 inline void _CompositeRow_Rgb2Rgb_Blend_NoClip_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp) |
| 2965 { | 2965 { |
| 2966 int blended_colors[3]; | 2966 int blended_colors[3]; |
| 2967 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2967 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 2968 int src_gap = src_Bpp - 3; | 2968 int src_gap = src_Bpp - 3; |
| 2969 for (int col = 0; col < width; col ++) { | 2969 for (int col = 0; col < width; col ++) { |
| 2970 if (bNonseparableBlend) { | 2970 if (bNonseparableBlend) { |
| 2971 FX_BYTE dest_scan_o[3]; | 2971 uint8_t dest_scan_o[3]; |
| 2972 dest_scan_o[0] = dest_scan[2]; | 2972 dest_scan_o[0] = dest_scan[2]; |
| 2973 dest_scan_o[1] = dest_scan[1]; | 2973 dest_scan_o[1] = dest_scan[1]; |
| 2974 dest_scan_o[2] = dest_scan[0]; | 2974 dest_scan_o[2] = dest_scan[0]; |
| 2975 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 2975 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 2976 } | 2976 } |
| 2977 for (int color = 0; color < 3; color ++) { | 2977 for (int color = 0; color < 3; color ++) { |
| 2978 int index = 2 - color; | 2978 int index = 2 - color; |
| 2979 int back_color = FX_GAMMA(dest_scan[index]); | 2979 int back_color = FX_GAMMA(dest_scan[index]); |
| 2980 int src_color = FX_GAMMA(*src_scan); | 2980 int src_color = FX_GAMMA(*src_scan); |
| 2981 int blended = bNonseparableBlend ? blended_colors[color] : | 2981 int blended = bNonseparableBlend ? blended_colors[color] : |
| 2982 _BLEND(blend_type, back_color, src_color); | 2982 _BLEND(blend_type, back_color, src_color); |
| 2983 dest_scan[index] = FX_GAMMA_INVERSE(blended); | 2983 dest_scan[index] = FX_GAMMA_INVERSE(blended); |
| 2984 src_scan ++; | 2984 src_scan ++; |
| 2985 } | 2985 } |
| 2986 dest_scan += dest_Bpp; | 2986 dest_scan += dest_Bpp; |
| 2987 src_scan += src_gap; | 2987 src_scan += src_gap; |
| 2988 } | 2988 } |
| 2989 } | 2989 } |
| 2990 inline void _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(FX_LPBYTE dest_scan, FX_
LPCBYTE src_scan, int width, int dest_Bpp, FX_LPCBYTE clip_scan) | 2990 inline void _CompositeRow_Argb2Rgb_NoBlend_RgbByteOrder(FX_LPBYTE dest_scan, FX_
LPCBYTE src_scan, int width, int dest_Bpp, FX_LPCBYTE clip_scan) |
| 2991 { | 2991 { |
| 2992 for (int col = 0; col < width; col ++) { | 2992 for (int col = 0; col < width; col ++) { |
| 2993 FX_BYTE src_alpha; | 2993 uint8_t src_alpha; |
| 2994 if (clip_scan) { | 2994 if (clip_scan) { |
| 2995 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 2995 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
| 2996 } else { | 2996 } else { |
| 2997 src_alpha = src_scan[3]; | 2997 src_alpha = src_scan[3]; |
| 2998 } | 2998 } |
| 2999 if (src_alpha == 255) { | 2999 if (src_alpha == 255) { |
| 3000 dest_scan[2] = FX_GAMMA_INVERSE(*src_scan++); | 3000 dest_scan[2] = FX_GAMMA_INVERSE(*src_scan++); |
| 3001 dest_scan[1] = FX_GAMMA_INVERSE(*src_scan++); | 3001 dest_scan[1] = FX_GAMMA_INVERSE(*src_scan++); |
| 3002 dest_scan[0] = FX_GAMMA_INVERSE(*src_scan++); | 3002 dest_scan[0] = FX_GAMMA_INVERSE(*src_scan++); |
| 3003 dest_scan += dest_Bpp; | 3003 dest_scan += dest_Bpp; |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3028 src_scan += src_Bpp; | 3028 src_scan += src_Bpp; |
| 3029 } | 3029 } |
| 3030 } | 3030 } |
| 3031 inline void _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int width, int blend_type, int src_Bpp, FX_LPCBYTE clip_sca
n) | 3031 inline void _CompositeRow_Rgb2Argb_Blend_Clip_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int width, int blend_type, int src_Bpp, FX_LPCBYTE clip_sca
n) |
| 3032 { | 3032 { |
| 3033 int blended_colors[3]; | 3033 int blended_colors[3]; |
| 3034 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 3034 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 3035 int src_gap = src_Bpp - 3; | 3035 int src_gap = src_Bpp - 3; |
| 3036 for (int col = 0; col < width; col ++) { | 3036 for (int col = 0; col < width; col ++) { |
| 3037 int src_alpha = *clip_scan ++; | 3037 int src_alpha = *clip_scan ++; |
| 3038 FX_BYTE back_alpha = dest_scan[3]; | 3038 uint8_t back_alpha = dest_scan[3]; |
| 3039 if (back_alpha == 0) { | 3039 if (back_alpha == 0) { |
| 3040 dest_scan[2] = FX_GAMMA(*src_scan++); | 3040 dest_scan[2] = FX_GAMMA(*src_scan++); |
| 3041 dest_scan[1] = FX_GAMMA(*src_scan++); | 3041 dest_scan[1] = FX_GAMMA(*src_scan++); |
| 3042 dest_scan[0] = FX_GAMMA(*src_scan++); | 3042 dest_scan[0] = FX_GAMMA(*src_scan++); |
| 3043 src_scan += src_gap; | 3043 src_scan += src_gap; |
| 3044 dest_scan += 4; | 3044 dest_scan += 4; |
| 3045 continue; | 3045 continue; |
| 3046 } | 3046 } |
| 3047 if (src_alpha == 0) { | 3047 if (src_alpha == 0) { |
| 3048 dest_scan += 4; | 3048 dest_scan += 4; |
| 3049 src_scan += src_Bpp; | 3049 src_scan += src_Bpp; |
| 3050 continue; | 3050 continue; |
| 3051 } | 3051 } |
| 3052 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3052 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3053 dest_scan[3] = dest_alpha; | 3053 dest_scan[3] = dest_alpha; |
| 3054 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3054 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3055 if (bNonseparableBlend) { | 3055 if (bNonseparableBlend) { |
| 3056 FX_BYTE dest_scan_o[3]; | 3056 uint8_t dest_scan_o[3]; |
| 3057 dest_scan_o[0] = dest_scan[2]; | 3057 dest_scan_o[0] = dest_scan[2]; |
| 3058 dest_scan_o[1] = dest_scan[1]; | 3058 dest_scan_o[1] = dest_scan[1]; |
| 3059 dest_scan_o[2] = dest_scan[0]; | 3059 dest_scan_o[2] = dest_scan[0]; |
| 3060 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3060 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3061 } | 3061 } |
| 3062 for (int color = 0; color < 3; color ++) { | 3062 for (int color = 0; color < 3; color ++) { |
| 3063 int index = 2 - color; | 3063 int index = 2 - color; |
| 3064 int src_color = FX_GAMMA(*src_scan); | 3064 int src_color = FX_GAMMA(*src_scan); |
| 3065 int blended = bNonseparableBlend ? blended_colors[color] : | 3065 int blended = bNonseparableBlend ? blended_colors[color] : |
| 3066 _BLEND(blend_type, dest_scan[index], src_color); | 3066 _BLEND(blend_type, dest_scan[index], src_color); |
| 3067 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 3067 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
| 3068 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended, alph
a_ratio); | 3068 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], blended, alph
a_ratio); |
| 3069 src_scan ++; | 3069 src_scan ++; |
| 3070 } | 3070 } |
| 3071 dest_scan += 4; | 3071 dest_scan += 4; |
| 3072 src_scan += src_gap; | 3072 src_scan += src_gap; |
| 3073 } | 3073 } |
| 3074 } | 3074 } |
| 3075 inline void _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(FX_LPBYTE dest_scan, F
X_LPCBYTE src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, FX_LPC
BYTE clip_scan) | 3075 inline void _CompositeRow_Rgb2Rgb_Blend_Clip_RgbByteOrder(FX_LPBYTE dest_scan, F
X_LPCBYTE src_scan, int width, int blend_type, int dest_Bpp, int src_Bpp, FX_LPC
BYTE clip_scan) |
| 3076 { | 3076 { |
| 3077 int blended_colors[3]; | 3077 int blended_colors[3]; |
| 3078 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 3078 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
| 3079 int src_gap = src_Bpp - 3; | 3079 int src_gap = src_Bpp - 3; |
| 3080 for (int col = 0; col < width; col ++) { | 3080 for (int col = 0; col < width; col ++) { |
| 3081 FX_BYTE src_alpha = *clip_scan ++; | 3081 uint8_t src_alpha = *clip_scan ++; |
| 3082 if (src_alpha == 0) { | 3082 if (src_alpha == 0) { |
| 3083 dest_scan += dest_Bpp; | 3083 dest_scan += dest_Bpp; |
| 3084 src_scan += src_Bpp; | 3084 src_scan += src_Bpp; |
| 3085 continue; | 3085 continue; |
| 3086 } | 3086 } |
| 3087 if (bNonseparableBlend) { | 3087 if (bNonseparableBlend) { |
| 3088 FX_BYTE dest_scan_o[3]; | 3088 uint8_t dest_scan_o[3]; |
| 3089 dest_scan_o[0] = dest_scan[2]; | 3089 dest_scan_o[0] = dest_scan[2]; |
| 3090 dest_scan_o[1] = dest_scan[1]; | 3090 dest_scan_o[1] = dest_scan[1]; |
| 3091 dest_scan_o[2] = dest_scan[0]; | 3091 dest_scan_o[2] = dest_scan[0]; |
| 3092 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3092 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3093 } | 3093 } |
| 3094 for (int color = 0; color < 3; color ++) { | 3094 for (int color = 0; color < 3; color ++) { |
| 3095 int index = 2 - color; | 3095 int index = 2 - color; |
| 3096 int src_color = FX_GAMMA(*src_scan); | 3096 int src_color = FX_GAMMA(*src_scan); |
| 3097 int back_color = FX_GAMMA(dest_scan[index]); | 3097 int back_color = FX_GAMMA(dest_scan[index]); |
| 3098 int blended = bNonseparableBlend ? blended_colors[color] : | 3098 int blended = bNonseparableBlend ? blended_colors[color] : |
| (...skipping 18 matching lines...) Expand all Loading... |
| 3117 dest_scan += 4; | 3117 dest_scan += 4; |
| 3118 src_scan += src_gap; | 3118 src_scan += src_gap; |
| 3119 continue; | 3119 continue; |
| 3120 } | 3120 } |
| 3121 if (src_alpha == 0) { | 3121 if (src_alpha == 0) { |
| 3122 dest_scan += 4; | 3122 dest_scan += 4; |
| 3123 src_scan += src_Bpp; | 3123 src_scan += src_Bpp; |
| 3124 continue; | 3124 continue; |
| 3125 } | 3125 } |
| 3126 int back_alpha = dest_scan[3]; | 3126 int back_alpha = dest_scan[3]; |
| 3127 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3127 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3128 dest_scan[3] = dest_alpha; | 3128 dest_scan[3] = dest_alpha; |
| 3129 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3129 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3130 for (int color = 0; color < 3; color ++) { | 3130 for (int color = 0; color < 3; color ++) { |
| 3131 int index = 2 - color; | 3131 int index = 2 - color; |
| 3132 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], FX_GAMMA(*src
_scan), alpha_ratio); | 3132 dest_scan[index] = FXDIB_ALPHA_MERGE(dest_scan[index], FX_GAMMA(*src
_scan), alpha_ratio); |
| 3133 src_scan ++; | 3133 src_scan ++; |
| 3134 } | 3134 } |
| 3135 dest_scan += 4; | 3135 dest_scan += 4; |
| 3136 src_scan += src_gap; | 3136 src_scan += src_gap; |
| 3137 } | 3137 } |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3240 dest_scan += 4; | 3240 dest_scan += 4; |
| 3241 continue; | 3241 continue; |
| 3242 } | 3242 } |
| 3243 int src_alpha = clip_scan[col]; | 3243 int src_alpha = clip_scan[col]; |
| 3244 if (src_alpha == 0) { | 3244 if (src_alpha == 0) { |
| 3245 dest_scan += 4; | 3245 dest_scan += 4; |
| 3246 src_scan ++; | 3246 src_scan ++; |
| 3247 continue; | 3247 continue; |
| 3248 } | 3248 } |
| 3249 int back_alpha = dest_scan[3]; | 3249 int back_alpha = dest_scan[3]; |
| 3250 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3250 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3251 dest_scan[3] = dest_alpha; | 3251 dest_scan[3] = dest_alpha; |
| 3252 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3252 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3253 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ra
tio); | 3253 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ra
tio); |
| 3254 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ra
tio); | 3254 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ra
tio); |
| 3255 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ra
tio); | 3255 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ra
tio); |
| 3256 dest_scan += 4; | 3256 dest_scan += 4; |
| 3257 src_scan ++; | 3257 src_scan ++; |
| 3258 } | 3258 } |
| 3259 } | 3259 } |
| 3260 inline void _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int src_left, int width, | 3260 inline void _CompositeRow_1bppRgb2Argb_NoBlend_RgbByteOrder(FX_LPBYTE dest_scan,
FX_LPCBYTE src_scan, int src_left, int width, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 3291 dest_scan[3] = 255; | 3291 dest_scan[3] = 255; |
| 3292 dest_scan += 4; | 3292 dest_scan += 4; |
| 3293 continue; | 3293 continue; |
| 3294 } | 3294 } |
| 3295 int src_alpha = clip_scan[col]; | 3295 int src_alpha = clip_scan[col]; |
| 3296 if (src_alpha == 0) { | 3296 if (src_alpha == 0) { |
| 3297 dest_scan += 4; | 3297 dest_scan += 4; |
| 3298 continue; | 3298 continue; |
| 3299 } | 3299 } |
| 3300 int back_alpha = dest_scan[3]; | 3300 int back_alpha = dest_scan[3]; |
| 3301 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3301 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3302 dest_scan[3] = dest_alpha; | 3302 dest_scan[3] = dest_alpha; |
| 3303 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3303 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3304 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ra
tio); | 3304 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], FX_GAMMA(src_b), alpha_ra
tio); |
| 3305 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ra
tio); | 3305 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], FX_GAMMA(src_g), alpha_ra
tio); |
| 3306 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ra
tio); | 3306 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], FX_GAMMA(src_r), alpha_ra
tio); |
| 3307 dest_scan += 4; | 3307 dest_scan += 4; |
| 3308 } | 3308 } |
| 3309 } | 3309 } |
| 3310 void _CompositeRow_ByteMask2Argb_RgbByteOrder(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count, | 3310 void _CompositeRow_ByteMask2Argb_RgbByteOrder(FX_LPBYTE dest_scan, FX_LPCBYTE sr
c_scan, int mask_alpha, int src_r, int src_g, int src_b, int pixel_count, |
| 3311 int blend_type, FX_LPCBYTE clip_scan) | 3311 int blend_type, FX_LPCBYTE clip_scan) |
| 3312 { | 3312 { |
| 3313 for (int col = 0; col < pixel_count; col ++) { | 3313 for (int col = 0; col < pixel_count; col ++) { |
| 3314 int src_alpha; | 3314 int src_alpha; |
| 3315 if (clip_scan) { | 3315 if (clip_scan) { |
| 3316 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 3316 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 3317 } else { | 3317 } else { |
| 3318 src_alpha = mask_alpha * src_scan[col] / 255; | 3318 src_alpha = mask_alpha * src_scan[col] / 255; |
| 3319 } | 3319 } |
| 3320 FX_BYTE back_alpha = dest_scan[3]; | 3320 uint8_t back_alpha = dest_scan[3]; |
| 3321 if (back_alpha == 0) { | 3321 if (back_alpha == 0) { |
| 3322 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); | 3322 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); |
| 3323 dest_scan += 4; | 3323 dest_scan += 4; |
| 3324 continue; | 3324 continue; |
| 3325 } | 3325 } |
| 3326 if (src_alpha == 0) { | 3326 if (src_alpha == 0) { |
| 3327 dest_scan += 4; | 3327 dest_scan += 4; |
| 3328 continue; | 3328 continue; |
| 3329 } | 3329 } |
| 3330 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3330 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3331 dest_scan[3] = dest_alpha; | 3331 dest_scan[3] = dest_alpha; |
| 3332 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3332 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3333 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3333 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3334 int blended_colors[3]; | 3334 int blended_colors[3]; |
| 3335 FX_BYTE src_scan[3]; | 3335 uint8_t src_scan[3]; |
| 3336 FX_BYTE dest_scan_o[3]; | 3336 uint8_t dest_scan_o[3]; |
| 3337 src_scan[0] = src_b; | 3337 src_scan[0] = src_b; |
| 3338 src_scan[1] = src_g; | 3338 src_scan[1] = src_g; |
| 3339 src_scan[2] = src_r; | 3339 src_scan[2] = src_r; |
| 3340 dest_scan_o[0] = dest_scan[2]; | 3340 dest_scan_o[0] = dest_scan[2]; |
| 3341 dest_scan_o[1] = dest_scan[1]; | 3341 dest_scan_o[1] = dest_scan[1]; |
| 3342 dest_scan_o[2] = dest_scan[0]; | 3342 dest_scan_o[2] = dest_scan[0]; |
| 3343 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3343 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3344 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], al
pha_ratio); | 3344 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], al
pha_ratio); |
| 3345 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], al
pha_ratio); | 3345 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], al
pha_ratio); |
| 3346 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], al
pha_ratio); | 3346 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], al
pha_ratio); |
| (...skipping 24 matching lines...) Expand all Loading... |
| 3371 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; | 3371 src_alpha = mask_alpha * clip_scan[col] * src_scan[col] / 255 / 255; |
| 3372 } else { | 3372 } else { |
| 3373 src_alpha = mask_alpha * src_scan[col] / 255; | 3373 src_alpha = mask_alpha * src_scan[col] / 255; |
| 3374 } | 3374 } |
| 3375 if (src_alpha == 0) { | 3375 if (src_alpha == 0) { |
| 3376 dest_scan += Bpp; | 3376 dest_scan += Bpp; |
| 3377 continue; | 3377 continue; |
| 3378 } | 3378 } |
| 3379 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3379 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3380 int blended_colors[3]; | 3380 int blended_colors[3]; |
| 3381 FX_BYTE src_scan[3]; | 3381 uint8_t src_scan[3]; |
| 3382 FX_BYTE dest_scan_o[3]; | 3382 uint8_t dest_scan_o[3]; |
| 3383 src_scan[0] = src_b; | 3383 src_scan[0] = src_b; |
| 3384 src_scan[1] = src_g; | 3384 src_scan[1] = src_g; |
| 3385 src_scan[2] = src_r; | 3385 src_scan[2] = src_r; |
| 3386 dest_scan_o[0] = dest_scan[2]; | 3386 dest_scan_o[0] = dest_scan[2]; |
| 3387 dest_scan_o[1] = dest_scan[1]; | 3387 dest_scan_o[1] = dest_scan[1]; |
| 3388 dest_scan_o[2] = dest_scan[0]; | 3388 dest_scan_o[2] = dest_scan[0]; |
| 3389 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3389 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3390 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], sr
c_alpha); | 3390 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], sr
c_alpha); |
| 3391 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], sr
c_alpha); | 3391 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], sr
c_alpha); |
| 3392 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], sr
c_alpha); | 3392 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], sr
c_alpha); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 3422 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { | 3422 if (!(src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))
)) { |
| 3423 dest_scan += 4; | 3423 dest_scan += 4; |
| 3424 continue; | 3424 continue; |
| 3425 } | 3425 } |
| 3426 int src_alpha; | 3426 int src_alpha; |
| 3427 if (clip_scan) { | 3427 if (clip_scan) { |
| 3428 src_alpha = mask_alpha * clip_scan[col] / 255; | 3428 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 3429 } else { | 3429 } else { |
| 3430 src_alpha = mask_alpha; | 3430 src_alpha = mask_alpha; |
| 3431 } | 3431 } |
| 3432 FX_BYTE back_alpha = dest_scan[3]; | 3432 uint8_t back_alpha = dest_scan[3]; |
| 3433 if (back_alpha == 0) { | 3433 if (back_alpha == 0) { |
| 3434 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); | 3434 FXARGB_SETRGBORDERDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g
, src_b)); |
| 3435 dest_scan += 4; | 3435 dest_scan += 4; |
| 3436 continue; | 3436 continue; |
| 3437 } | 3437 } |
| 3438 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; | 3438 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 2
55; |
| 3439 dest_scan[3] = dest_alpha; | 3439 dest_scan[3] = dest_alpha; |
| 3440 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3440 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 3441 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3441 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3442 int blended_colors[3]; | 3442 int blended_colors[3]; |
| 3443 FX_BYTE src_scan[3]; | 3443 uint8_t src_scan[3]; |
| 3444 FX_BYTE dest_scan_o[3]; | 3444 uint8_t dest_scan_o[3]; |
| 3445 src_scan[0] = src_b; | 3445 src_scan[0] = src_b; |
| 3446 src_scan[1] = src_g; | 3446 src_scan[1] = src_g; |
| 3447 src_scan[2] = src_r; | 3447 src_scan[2] = src_r; |
| 3448 dest_scan_o[0] = dest_scan[2]; | 3448 dest_scan_o[0] = dest_scan[2]; |
| 3449 dest_scan_o[1] = dest_scan[1]; | 3449 dest_scan_o[1] = dest_scan[1]; |
| 3450 dest_scan_o[2] = dest_scan[0]; | 3450 dest_scan_o[2] = dest_scan[0]; |
| 3451 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3451 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3452 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], al
pha_ratio); | 3452 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], al
pha_ratio); |
| 3453 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], al
pha_ratio); | 3453 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], al
pha_ratio); |
| 3454 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], al
pha_ratio); | 3454 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], al
pha_ratio); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3494 src_alpha = mask_alpha * clip_scan[col] / 255; | 3494 src_alpha = mask_alpha * clip_scan[col] / 255; |
| 3495 } else { | 3495 } else { |
| 3496 src_alpha = mask_alpha; | 3496 src_alpha = mask_alpha; |
| 3497 } | 3497 } |
| 3498 if (src_alpha == 0) { | 3498 if (src_alpha == 0) { |
| 3499 dest_scan += Bpp; | 3499 dest_scan += Bpp; |
| 3500 continue; | 3500 continue; |
| 3501 } | 3501 } |
| 3502 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { | 3502 if (blend_type >= FXDIB_BLEND_NONSEPARABLE) { |
| 3503 int blended_colors[3]; | 3503 int blended_colors[3]; |
| 3504 FX_BYTE src_scan[3]; | 3504 uint8_t src_scan[3]; |
| 3505 FX_BYTE dest_scan_o[3]; | 3505 uint8_t dest_scan_o[3]; |
| 3506 src_scan[0] = src_b; | 3506 src_scan[0] = src_b; |
| 3507 src_scan[1] = src_g; | 3507 src_scan[1] = src_g; |
| 3508 src_scan[2] = src_r; | 3508 src_scan[2] = src_r; |
| 3509 dest_scan_o[0] = dest_scan[2]; | 3509 dest_scan_o[0] = dest_scan[2]; |
| 3510 dest_scan_o[1] = dest_scan[1]; | 3510 dest_scan_o[1] = dest_scan[1]; |
| 3511 dest_scan_o[2] = dest_scan[0]; | 3511 dest_scan_o[2] = dest_scan[0]; |
| 3512 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); | 3512 _RGB_Blend(blend_type, src_scan, dest_scan_o, blended_colors); |
| 3513 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], sr
c_alpha); | 3513 dest_scan[2] = FXDIB_ALPHA_MERGE(dest_scan[2], blended_colors[0], sr
c_alpha); |
| 3514 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], sr
c_alpha); | 3514 dest_scan[1] = FXDIB_ALPHA_MERGE(dest_scan[1], blended_colors[1], sr
c_alpha); |
| 3515 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], sr
c_alpha); | 3515 dest_scan[0] = FXDIB_ALPHA_MERGE(dest_scan[0], blended_colors[2], sr
c_alpha); |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3552 return TRUE; | 3552 return TRUE; |
| 3553 } | 3553 } |
| 3554 if ((dest_format & 0xff) == 8) { | 3554 if ((dest_format & 0xff) == 8) { |
| 3555 if (pIccTransform) { | 3555 if (pIccTransform) { |
| 3556 mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) : FXARGB_T
ODIB(mask_color); | 3556 mask_color = (alpha_flag >> 8) ? FXCMYK_TODIB(mask_color) : FXARGB_T
ODIB(mask_color); |
| 3557 FX_LPBYTE gray_p = (FX_LPBYTE)&mask_color; | 3557 FX_LPBYTE gray_p = (FX_LPBYTE)&mask_color; |
| 3558 pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1); | 3558 pIccModule->TranslateScanline(pIccTransform, gray_p, gray_p, 1); |
| 3559 mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0]; | 3559 mask_red = dest_format & 0x0400 ? FX_CCOLOR(gray_p[0]) : gray_p[0]; |
| 3560 } else { | 3560 } else { |
| 3561 if (alpha_flag >> 8) { | 3561 if (alpha_flag >> 8) { |
| 3562 FX_BYTE r, g, b; | 3562 uint8_t r, g, b; |
| 3563 AdobeCMYK_to_sRGB1(mask_red, mask_green, mask_blue, mask_black, | 3563 AdobeCMYK_to_sRGB1(mask_red, mask_green, mask_blue, mask_black, |
| 3564 r, g, b); | 3564 r, g, b); |
| 3565 mask_red = FXRGB2GRAY(r, g, b); | 3565 mask_red = FXRGB2GRAY(r, g, b); |
| 3566 } else { | 3566 } else { |
| 3567 mask_red = FXRGB2GRAY(mask_red, mask_green, mask_blue); | 3567 mask_red = FXRGB2GRAY(mask_red, mask_green, mask_blue); |
| 3568 } | 3568 } |
| 3569 if (dest_format & 0x0400) { | 3569 if (dest_format & 0x0400) { |
| 3570 mask_red = FX_CCOLOR(mask_red); | 3570 mask_red = FX_CCOLOR(mask_red); |
| 3571 } | 3571 } |
| 3572 } | 3572 } |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3593 void* icc_module, void* pIccTransform) | 3593 void* icc_module, void* pIccTransform) |
| 3594 { | 3594 { |
| 3595 ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module; | 3595 ICodec_IccModule* pIccModule = (ICodec_IccModule*)icc_module; |
| 3596 FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE; | 3596 FX_BOOL isSrcCmyk = src_format & 0x0400 ? TRUE : FALSE; |
| 3597 FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE; | 3597 FX_BOOL isDstCmyk = dest_format & 0x0400 ? TRUE : FALSE; |
| 3598 pDestPalette = NULL; | 3598 pDestPalette = NULL; |
| 3599 if (pIccTransform) { | 3599 if (pIccTransform) { |
| 3600 if (pSrcPalette) { | 3600 if (pSrcPalette) { |
| 3601 if ((dest_format & 0xff) == 8) { | 3601 if ((dest_format & 0xff) == 8) { |
| 3602 int pal_count = 1 << (src_format & 0xff); | 3602 int pal_count = 1 << (src_format & 0xff); |
| 3603 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3603 FX_LPBYTE gray_pal = FX_Alloc(uint8_t, pal_count); |
| 3604 pDestPalette = (FX_DWORD*)gray_pal; | 3604 pDestPalette = (FX_DWORD*)gray_pal; |
| 3605 for (int i = 0; i < pal_count; i ++) { | 3605 for (int i = 0; i < pal_count; i ++) { |
| 3606 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); | 3606 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); |
| 3607 pIccModule->TranslateScanline(pIccTransform, gray_pal, (FX_L
PCBYTE)&color, 1); | 3607 pIccModule->TranslateScanline(pIccTransform, gray_pal, (FX_L
PCBYTE)&color, 1); |
| 3608 gray_pal ++; | 3608 gray_pal ++; |
| 3609 } | 3609 } |
| 3610 } else { | 3610 } else { |
| 3611 int palsize = 1 << (src_format & 0xff); | 3611 int palsize = 1 << (src_format & 0xff); |
| 3612 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3612 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3613 for (int i = 0; i < palsize; i ++) { | 3613 for (int i = 0; i < palsize; i ++) { |
| 3614 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); | 3614 FX_DWORD color = isSrcCmyk ? FXCMYK_TODIB(pSrcPalette[i]) :
FXARGB_TODIB(pSrcPalette[i]); |
| 3615 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&col
or, (FX_LPCBYTE)&color, 1); | 3615 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&col
or, (FX_LPCBYTE)&color, 1); |
| 3616 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_T
ODIB(color); | 3616 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(color) : FXARGB_T
ODIB(color); |
| 3617 } | 3617 } |
| 3618 } | 3618 } |
| 3619 } else { | 3619 } else { |
| 3620 int pal_count = 1 << (src_format & 0xff); | 3620 int pal_count = 1 << (src_format & 0xff); |
| 3621 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3621 FX_LPBYTE gray_pal = FX_Alloc(uint8_t, pal_count); |
| 3622 if (pal_count == 2) { | 3622 if (pal_count == 2) { |
| 3623 gray_pal[0] = 0; | 3623 gray_pal[0] = 0; |
| 3624 gray_pal[1] = 255; | 3624 gray_pal[1] = 255; |
| 3625 } else { | 3625 } else { |
| 3626 for (int i = 0; i < pal_count; i++) { | 3626 for (int i = 0; i < pal_count; i++) { |
| 3627 gray_pal[i] = i; | 3627 gray_pal[i] = i; |
| 3628 } | 3628 } |
| 3629 } | 3629 } |
| 3630 if ((dest_format & 0xff) == 8) { | 3630 if ((dest_format & 0xff) == 8) { |
| 3631 pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal,
pal_count); | 3631 pIccModule->TranslateScanline(pIccTransform, gray_pal, gray_pal,
pal_count); |
| 3632 pDestPalette = (FX_DWORD*)gray_pal; | 3632 pDestPalette = (FX_DWORD*)gray_pal; |
| 3633 } else { | 3633 } else { |
| 3634 pDestPalette = FX_Alloc(FX_DWORD, pal_count); | 3634 pDestPalette = FX_Alloc(FX_DWORD, pal_count); |
| 3635 for (int i = 0; i < pal_count; i ++) { | 3635 for (int i = 0; i < pal_count; i ++) { |
| 3636 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&pDe
stPalette[i], &gray_pal[i], 1); | 3636 pIccModule->TranslateScanline(pIccTransform, (FX_LPBYTE)&pDe
stPalette[i], &gray_pal[i], 1); |
| 3637 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i])
: FXARGB_TODIB(pDestPalette[i]); | 3637 pDestPalette[i] = isDstCmyk ? FXCMYK_TODIB(pDestPalette[i])
: FXARGB_TODIB(pDestPalette[i]); |
| 3638 } | 3638 } |
| 3639 FX_Free(gray_pal); | 3639 FX_Free(gray_pal); |
| 3640 } | 3640 } |
| 3641 } | 3641 } |
| 3642 } else { | 3642 } else { |
| 3643 if (pSrcPalette) { | 3643 if (pSrcPalette) { |
| 3644 if ((dest_format & 0xff) == 8) { | 3644 if ((dest_format & 0xff) == 8) { |
| 3645 int pal_count = 1 << (src_format & 0xff); | 3645 int pal_count = 1 << (src_format & 0xff); |
| 3646 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3646 FX_LPBYTE gray_pal = FX_Alloc(uint8_t, pal_count); |
| 3647 pDestPalette = (FX_DWORD*)gray_pal; | 3647 pDestPalette = (FX_DWORD*)gray_pal; |
| 3648 if (isSrcCmyk) { | 3648 if (isSrcCmyk) { |
| 3649 for (int i = 0; i < pal_count; i ++) { | 3649 for (int i = 0; i < pal_count; i ++) { |
| 3650 FX_CMYK cmyk = pSrcPalette[i]; | 3650 FX_CMYK cmyk = pSrcPalette[i]; |
| 3651 FX_BYTE r, g, b; | 3651 uint8_t r, g, b; |
| 3652 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), | 3652 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), |
| 3653 r, g, b); | 3653 r, g, b); |
| 3654 *gray_pal ++ = FXRGB2GRAY(r, g, b); | 3654 *gray_pal ++ = FXRGB2GRAY(r, g, b); |
| 3655 } | 3655 } |
| 3656 } else | 3656 } else |
| 3657 for (int i = 0; i < pal_count; i ++) { | 3657 for (int i = 0; i < pal_count; i ++) { |
| 3658 FX_ARGB argb = pSrcPalette[i]; | 3658 FX_ARGB argb = pSrcPalette[i]; |
| 3659 *gray_pal ++ = FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb)
, FXARGB_B(argb)); | 3659 *gray_pal ++ = FXRGB2GRAY(FXARGB_R(argb), FXARGB_G(argb)
, FXARGB_B(argb)); |
| 3660 } | 3660 } |
| 3661 } else { | 3661 } else { |
| 3662 int palsize = 1 << (src_format & 0xff); | 3662 int palsize = 1 << (src_format & 0xff); |
| 3663 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3663 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3664 if (isDstCmyk == isSrcCmyk) { | 3664 if (isDstCmyk == isSrcCmyk) { |
| 3665 FXSYS_memcpy32(pDestPalette, pSrcPalette, palsize * sizeof(F
X_DWORD)); | 3665 FXSYS_memcpy32(pDestPalette, pSrcPalette, palsize * sizeof(F
X_DWORD)); |
| 3666 } else { | 3666 } else { |
| 3667 for (int i = 0; i < palsize; i ++) { | 3667 for (int i = 0; i < palsize; i ++) { |
| 3668 FX_CMYK cmyk = pSrcPalette[i]; | 3668 FX_CMYK cmyk = pSrcPalette[i]; |
| 3669 FX_BYTE r, g, b; | 3669 uint8_t r, g, b; |
| 3670 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), | 3670 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), |
| 3671 r, g, b); | 3671 r, g, b); |
| 3672 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); | 3672 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); |
| 3673 } | 3673 } |
| 3674 } | 3674 } |
| 3675 } | 3675 } |
| 3676 } else { | 3676 } else { |
| 3677 if ((dest_format & 0xff) == 8) { | 3677 if ((dest_format & 0xff) == 8) { |
| 3678 int pal_count = 1 << (src_format & 0xff); | 3678 int pal_count = 1 << (src_format & 0xff); |
| 3679 FX_LPBYTE gray_pal = FX_Alloc(FX_BYTE, pal_count); | 3679 FX_LPBYTE gray_pal = FX_Alloc(uint8_t, pal_count); |
| 3680 if (pal_count == 2) { | 3680 if (pal_count == 2) { |
| 3681 gray_pal[0] = 0; | 3681 gray_pal[0] = 0; |
| 3682 gray_pal[1] = 255; | 3682 gray_pal[1] = 255; |
| 3683 } else { | 3683 } else { |
| 3684 for (int i = 0; i < pal_count; i++) { | 3684 for (int i = 0; i < pal_count; i++) { |
| 3685 gray_pal[i] = i; | 3685 gray_pal[i] = i; |
| 3686 } | 3686 } |
| 3687 } | 3687 } |
| 3688 pDestPalette = (FX_DWORD*)gray_pal; | 3688 pDestPalette = (FX_DWORD*)gray_pal; |
| 3689 } else { | 3689 } else { |
| 3690 int palsize = 1 << (src_format & 0xff); | 3690 int palsize = 1 << (src_format & 0xff); |
| 3691 pDestPalette = FX_Alloc(FX_DWORD, palsize); | 3691 pDestPalette = FX_Alloc(FX_DWORD, palsize); |
| 3692 if (palsize == 2) { | 3692 if (palsize == 2) { |
| 3693 pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000; | 3693 pDestPalette[0] = isSrcCmyk ? 255 : 0xff000000; |
| 3694 pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff; | 3694 pDestPalette[1] = isSrcCmyk ? 0 : 0xffffffff; |
| 3695 } else { | 3695 } else { |
| 3696 for (int i = 0; i < palsize; i++) { | 3696 for (int i = 0; i < palsize; i++) { |
| 3697 pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x1010
1); | 3697 pDestPalette[i] = isSrcCmyk ? FX_CCOLOR(i) : (i * 0x1010
1); |
| 3698 } | 3698 } |
| 3699 } | 3699 } |
| 3700 if (isSrcCmyk != isDstCmyk) { | 3700 if (isSrcCmyk != isDstCmyk) { |
| 3701 for (int i = 0; i < palsize; i ++) { | 3701 for (int i = 0; i < palsize; i ++) { |
| 3702 FX_CMYK cmyk = pDestPalette[i]; | 3702 FX_CMYK cmyk = pDestPalette[i]; |
| 3703 FX_BYTE r, g, b; | 3703 uint8_t r, g, b; |
| 3704 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), | 3704 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(cmyk), FXSYS_GetMValu
e(cmyk), FXSYS_GetYValue(cmyk), FXSYS_GetKValue(cmyk), |
| 3705 r, g, b); | 3705 r, g, b); |
| 3706 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); | 3706 pDestPalette[i] = FXARGB_MAKE(0xff, r, g, b); |
| 3707 } | 3707 } |
| 3708 } | 3708 } |
| 3709 } | 3709 } |
| 3710 } | 3710 } |
| 3711 } | 3711 } |
| 3712 } | 3712 } |
| 3713 CFX_ScanlineCompositor::CFX_ScanlineCompositor() | 3713 CFX_ScanlineCompositor::CFX_ScanlineCompositor() |
| 3714 { | 3714 { |
| 3715 m_pSrcPalette = NULL; | 3715 m_pSrcPalette = NULL; |
| 3716 m_pCacheScanline = NULL; | 3716 m_pCacheScanline = NULL; |
| 3717 m_CacheSize = 0; | 3717 m_CacheSize = 0; |
| 3718 m_bRgbByteOrder = FALSE; | 3718 m_bRgbByteOrder = FALSE; |
| 3719 m_BlendType = FXDIB_BLEND_NORMAL; | 3719 m_BlendType = FXDIB_BLEND_NORMAL; |
| 3720 } | 3720 } |
| 3721 CFX_ScanlineCompositor::~CFX_ScanlineCompositor() | 3721 CFX_ScanlineCompositor::~CFX_ScanlineCompositor() |
| 3722 { | 3722 { |
| 3723 if (m_pSrcPalette) { | 3723 if (m_pSrcPalette) { |
| 3724 FX_Free(m_pSrcPalette); | 3724 FX_Free(m_pSrcPalette); |
| 3725 } | 3725 } |
| 3726 if (m_pCacheScanline) { | 3726 if (m_pCacheScanline) { |
| 3727 FX_Free(m_pCacheScanline); | 3727 FX_Free(m_pCacheScanline); |
| 3728 } | 3728 } |
| 3729 } | 3729 } |
| 3730 FX_BOOL CFX_ScanlineCompositor::Init(FXDIB_Format dest_format, FXDIB_Format src_
format, FX_INT32 width, FX_DWORD* pSrcPalette, | 3730 FX_BOOL CFX_ScanlineCompositor::Init(FXDIB_Format dest_format, FXDIB_Format src_
format, int32_t width, FX_DWORD* pSrcPalette, |
| 3731 FX_DWORD mask_color, int blend_type, FX_BOO
L bClip, FX_BOOL bRgbByteOrder, int alpha_flag, void* pIccTransform) | 3731 FX_DWORD mask_color, int blend_type, FX_BOO
L bClip, FX_BOOL bRgbByteOrder, int alpha_flag, void* pIccTransform) |
| 3732 { | 3732 { |
| 3733 m_SrcFormat = src_format; | 3733 m_SrcFormat = src_format; |
| 3734 m_DestFormat = dest_format; | 3734 m_DestFormat = dest_format; |
| 3735 m_BlendType = blend_type; | 3735 m_BlendType = blend_type; |
| 3736 m_bRgbByteOrder = bRgbByteOrder; | 3736 m_bRgbByteOrder = bRgbByteOrder; |
| 3737 ICodec_IccModule* pIccModule = NULL; | 3737 ICodec_IccModule* pIccModule = NULL; |
| 3738 if (CFX_GEModule::Get()->GetCodecModule()) { | 3738 if (CFX_GEModule::Get()->GetCodecModule()) { |
| 3739 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 3739 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
| 3740 } | 3740 } |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3854 } | 3854 } |
| 3855 if (m_DestFormat & 0x0400) { | 3855 if (m_DestFormat & 0x0400) { |
| 3856 for (int i = 0; i < width; i ++) { | 3856 for (int i = 0; i < width; i ++) { |
| 3857 *dest_scan = ~*dest_scan; | 3857 *dest_scan = ~*dest_scan; |
| 3858 dest_scan++; | 3858 dest_scan++; |
| 3859 } | 3859 } |
| 3860 } | 3860 } |
| 3861 } else { | 3861 } else { |
| 3862 int dest_Size = width * dest_Bpp + 4; | 3862 int dest_Size = width * dest_Bpp + 4; |
| 3863 if (dest_Size > m_CacheSize) { | 3863 if (dest_Size > m_CacheSize) { |
| 3864 m_pCacheScanline = FX_Realloc(FX_BYTE, m_pCacheScanline, dest_Size); | 3864 m_pCacheScanline = FX_Realloc(uint8_t, m_pCacheScanline, dest_Size); |
| 3865 if (!m_pCacheScanline) { | 3865 if (!m_pCacheScanline) { |
| 3866 return; | 3866 return; |
| 3867 } | 3867 } |
| 3868 m_CacheSize = dest_Size; | 3868 m_CacheSize = dest_Size; |
| 3869 } | 3869 } |
| 3870 switch (m_Transparency) { | 3870 switch (m_Transparency) { |
| 3871 case 0: | 3871 case 0: |
| 3872 case 4: | 3872 case 4: |
| 3873 case 8: | 3873 case 8: |
| 3874 case 4+8: { | 3874 case 4+8: { |
| (...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4151 } | 4151 } |
| 4152 ASSERT(pMask->IsAlphaMask()); | 4152 ASSERT(pMask->IsAlphaMask()); |
| 4153 ASSERT(m_bpp >= 8); | 4153 ASSERT(m_bpp >= 8); |
| 4154 if (!pMask->IsAlphaMask() || m_bpp < 8) { | 4154 if (!pMask->IsAlphaMask() || m_bpp < 8) { |
| 4155 return FALSE; | 4155 return FALSE; |
| 4156 } | 4156 } |
| 4157 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), pMask-
>GetHeight(), src_left, src_top, pClipRgn); | 4157 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), pMask-
>GetHeight(), src_left, src_top, pClipRgn); |
| 4158 if (width == 0 || height == 0) { | 4158 if (width == 0 || height == 0) { |
| 4159 return TRUE; | 4159 return TRUE; |
| 4160 } | 4160 } |
| 4161 int src_alpha = (FX_BYTE)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(
color); | 4161 int src_alpha = (uint8_t)(alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(
color); |
| 4162 if (src_alpha == 0) { | 4162 if (src_alpha == 0) { |
| 4163 return TRUE; | 4163 return TRUE; |
| 4164 } | 4164 } |
| 4165 const CFX_DIBitmap* pClipMask = NULL; | 4165 const CFX_DIBitmap* pClipMask = NULL; |
| 4166 FX_RECT clip_box; | 4166 FX_RECT clip_box; |
| 4167 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) { | 4167 if (pClipRgn && pClipRgn->GetType() != CFX_ClipRgn::RectI) { |
| 4168 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF); | 4168 ASSERT(pClipRgn->GetType() == CFX_ClipRgn::MaskF); |
| 4169 pClipMask = pClipRgn->GetMask(); | 4169 pClipMask = pClipRgn->GetMask(); |
| 4170 clip_box = pClipRgn->GetBox(); | 4170 clip_box = pClipRgn->GetBox(); |
| 4171 } | 4171 } |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4207 } | 4207 } |
| 4208 width = rect.Width(); | 4208 width = rect.Width(); |
| 4209 FX_DWORD dst_color; | 4209 FX_DWORD dst_color; |
| 4210 if (alpha_flag >> 8) { | 4210 if (alpha_flag >> 8) { |
| 4211 dst_color = FXCMYK_TODIB(color); | 4211 dst_color = FXCMYK_TODIB(color); |
| 4212 } else { | 4212 } else { |
| 4213 dst_color = FXARGB_TODIB(color); | 4213 dst_color = FXARGB_TODIB(color); |
| 4214 } | 4214 } |
| 4215 FX_LPBYTE color_p = (FX_LPBYTE)&dst_color; | 4215 FX_LPBYTE color_p = (FX_LPBYTE)&dst_color; |
| 4216 if (m_bpp == 8) { | 4216 if (m_bpp == 8) { |
| 4217 FX_BYTE gray = 255; | 4217 uint8_t gray = 255; |
| 4218 if (!IsAlphaMask()) { | 4218 if (!IsAlphaMask()) { |
| 4219 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() && CFX_GE
Module::Get()->GetCodecModule()->GetIccModule()) { | 4219 if (pIccTransform && CFX_GEModule::Get()->GetCodecModule() && CFX_GE
Module::Get()->GetCodecModule()->GetIccModule()) { |
| 4220 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModu
le()->GetIccModule(); | 4220 ICodec_IccModule* pIccModule = CFX_GEModule::Get()->GetCodecModu
le()->GetIccModule(); |
| 4221 pIccModule->TranslateScanline(pIccTransform, &gray, color_p, 1); | 4221 pIccModule->TranslateScanline(pIccTransform, &gray, color_p, 1); |
| 4222 } else { | 4222 } else { |
| 4223 if (alpha_flag >> 8) { | 4223 if (alpha_flag >> 8) { |
| 4224 FX_BYTE r, g, b; | 4224 uint8_t r, g, b; |
| 4225 AdobeCMYK_to_sRGB1(color_p[0], color_p[1], color_p[2], color
_p[3], | 4225 AdobeCMYK_to_sRGB1(color_p[0], color_p[1], color_p[2], color
_p[3], |
| 4226 r, g, b); | 4226 r, g, b); |
| 4227 gray = FXRGB2GRAY(r, g, b); | 4227 gray = FXRGB2GRAY(r, g, b); |
| 4228 } else { | 4228 } else { |
| 4229 gray = (FX_BYTE)FXRGB2GRAY((int)color_p[2], color_p[1], colo
r_p[0]); | 4229 gray = (uint8_t)FXRGB2GRAY((int)color_p[2], color_p[1], colo
r_p[0]); |
| 4230 } | 4230 } |
| 4231 } | 4231 } |
| 4232 if (IsCmykImage()) { | 4232 if (IsCmykImage()) { |
| 4233 gray = ~gray; | 4233 gray = ~gray; |
| 4234 } | 4234 } |
| 4235 } | 4235 } |
| 4236 for (int row = rect.top; row < rect.bottom; row ++) { | 4236 for (int row = rect.top; row < rect.bottom; row ++) { |
| 4237 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left; | 4237 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left; |
| 4238 if (src_alpha == 255) { | 4238 if (src_alpha == 255) { |
| 4239 FXSYS_memset8(dest_scan, gray, width); | 4239 FXSYS_memset8(dest_scan, gray, width); |
| 4240 } else | 4240 } else |
| 4241 for (int col = 0; col < width; col ++) { | 4241 for (int col = 0; col < width; col ++) { |
| 4242 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); | 4242 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, src_alpha); |
| 4243 dest_scan ++; | 4243 dest_scan ++; |
| 4244 } | 4244 } |
| 4245 } | 4245 } |
| 4246 return TRUE; | 4246 return TRUE; |
| 4247 } else if (m_bpp == 1) { | 4247 } else if (m_bpp == 1) { |
| 4248 ASSERT(!IsCmykImage() && (FX_BYTE)(alpha_flag >> 8) == 0); | 4248 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); |
| 4249 int left_shift = rect.left % 8; | 4249 int left_shift = rect.left % 8; |
| 4250 int right_shift = rect.right % 8; | 4250 int right_shift = rect.right % 8; |
| 4251 int width = rect.right / 8 - rect.left / 8; | 4251 int width = rect.right / 8 - rect.left / 8; |
| 4252 int index = 0; | 4252 int index = 0; |
| 4253 if (m_pPalette == NULL) { | 4253 if (m_pPalette == NULL) { |
| 4254 index = ((FX_BYTE)color == 0xff) ? 1 : 0; | 4254 index = ((uint8_t)color == 0xff) ? 1 : 0; |
| 4255 } else { | 4255 } else { |
| 4256 for (int i = 0; i < 2; i ++) | 4256 for (int i = 0; i < 2; i ++) |
| 4257 if (m_pPalette[i] == color) { | 4257 if (m_pPalette[i] == color) { |
| 4258 index = i; | 4258 index = i; |
| 4259 } | 4259 } |
| 4260 } | 4260 } |
| 4261 for (int row = rect.top; row < rect.bottom; row ++) { | 4261 for (int row = rect.top; row < rect.bottom; row ++) { |
| 4262 FX_BYTE* dest_scan_top = (FX_BYTE*)GetScanline(row) + rect.left / 8; | 4262 uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8; |
| 4263 FX_BYTE* dest_scan_top_r = (FX_BYTE*)GetScanline(row) + rect.right /
8; | 4263 uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right /
8; |
| 4264 FX_BYTE left_flag = *dest_scan_top & (255 << (8 - left_shift)); | 4264 uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift)); |
| 4265 FX_BYTE right_flag = *dest_scan_top_r & (255 >> right_shift); | 4265 uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift); |
| 4266 if (width) { | 4266 if (width) { |
| 4267 FXSYS_memset8(dest_scan_top + 1, index ? 255 : 0, width - 1); | 4267 FXSYS_memset8(dest_scan_top + 1, index ? 255 : 0, width - 1); |
| 4268 if (!index) { | 4268 if (!index) { |
| 4269 *dest_scan_top &= left_flag; | 4269 *dest_scan_top &= left_flag; |
| 4270 *dest_scan_top_r &= right_flag; | 4270 *dest_scan_top_r &= right_flag; |
| 4271 } else { | 4271 } else { |
| 4272 *dest_scan_top |= ~left_flag; | 4272 *dest_scan_top |= ~left_flag; |
| 4273 *dest_scan_top_r |= ~right_flag; | 4273 *dest_scan_top_r |= ~right_flag; |
| 4274 } | 4274 } |
| 4275 } else { | 4275 } else { |
| (...skipping 15 matching lines...) Expand all Loading... |
| 4291 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); | 4291 pIccModule->TranslateScanline(pIccTransform, color_p, color_p, 1); |
| 4292 } else { | 4292 } else { |
| 4293 if (alpha_flag >> 8 && !IsCmykImage()) | 4293 if (alpha_flag >> 8 && !IsCmykImage()) |
| 4294 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), F
XSYS_GetYValue(color), FXSYS_GetKValue(color), | 4294 AdobeCMYK_to_sRGB1(FXSYS_GetCValue(color), FXSYS_GetMValue(color), F
XSYS_GetYValue(color), FXSYS_GetKValue(color), |
| 4295 color_p[2], color_p[1], color_p[0]); | 4295 color_p[2], color_p[1], color_p[0]); |
| 4296 else if (!(alpha_flag >> 8) && IsCmykImage()) { | 4296 else if (!(alpha_flag >> 8) && IsCmykImage()) { |
| 4297 return FALSE; | 4297 return FALSE; |
| 4298 } | 4298 } |
| 4299 } | 4299 } |
| 4300 if(!IsCmykImage()) { | 4300 if(!IsCmykImage()) { |
| 4301 color_p[3] = (FX_BYTE)src_alpha; | 4301 color_p[3] = (uint8_t)src_alpha; |
| 4302 } | 4302 } |
| 4303 int Bpp = m_bpp / 8; | 4303 int Bpp = m_bpp / 8; |
| 4304 FX_BOOL bAlpha = HasAlpha(); | 4304 FX_BOOL bAlpha = HasAlpha(); |
| 4305 FX_BOOL bArgb = GetFormat() == FXDIB_Argb ? TRUE : FALSE; | 4305 FX_BOOL bArgb = GetFormat() == FXDIB_Argb ? TRUE : FALSE; |
| 4306 if (src_alpha == 255) { | 4306 if (src_alpha == 255) { |
| 4307 for (int row = rect.top; row < rect.bottom; row ++) { | 4307 for (int row = rect.top; row < rect.bottom; row ++) { |
| 4308 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; | 4308 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; |
| 4309 FX_LPBYTE dest_scan_alpha = m_pAlphaMask ? (FX_LPBYTE)m_pAlphaMask->
GetScanline(row) + rect.left : NULL; | 4309 FX_LPBYTE dest_scan_alpha = m_pAlphaMask ? (FX_LPBYTE)m_pAlphaMask->
GetScanline(row) + rect.left : NULL; |
| 4310 if (dest_scan_alpha) { | 4310 if (dest_scan_alpha) { |
| 4311 FXSYS_memset8(dest_scan_alpha, 0xff, width); | 4311 FXSYS_memset8(dest_scan_alpha, 0xff, width); |
| (...skipping 11 matching lines...) Expand all Loading... |
| 4323 } | 4323 } |
| 4324 } | 4324 } |
| 4325 } | 4325 } |
| 4326 return TRUE; | 4326 return TRUE; |
| 4327 } | 4327 } |
| 4328 for (int row = rect.top; row < rect.bottom; row ++) { | 4328 for (int row = rect.top; row < rect.bottom; row ++) { |
| 4329 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; | 4329 FX_LPBYTE dest_scan = m_pBuffer + row * m_Pitch + rect.left * Bpp; |
| 4330 if (bAlpha) { | 4330 if (bAlpha) { |
| 4331 if (bArgb) { | 4331 if (bArgb) { |
| 4332 for (int col = 0; col < width; col ++) { | 4332 for (int col = 0; col < width; col ++) { |
| 4333 FX_BYTE back_alpha = dest_scan[3]; | 4333 uint8_t back_alpha = dest_scan[3]; |
| 4334 if (back_alpha == 0) { | 4334 if (back_alpha == 0) { |
| 4335 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[
2], color_p[1], color_p[0])); | 4335 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, color_p[
2], color_p[1], color_p[0])); |
| 4336 dest_scan += 4; | 4336 dest_scan += 4; |
| 4337 continue; | 4337 continue; |
| 4338 } | 4338 } |
| 4339 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * s
rc_alpha / 255; | 4339 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * s
rc_alpha / 255; |
| 4340 int alpha_ratio = src_alpha * 255 / dest_alpha; | 4340 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 4341 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[0], alpha
_ratio); | 4341 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[0], alpha
_ratio); |
| 4342 dest_scan ++; | 4342 dest_scan ++; |
| 4343 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[1], alpha
_ratio); | 4343 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[1], alpha
_ratio); |
| 4344 dest_scan ++; | 4344 dest_scan ++; |
| 4345 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[2], alpha
_ratio); | 4345 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[2], alpha
_ratio); |
| 4346 dest_scan ++; | 4346 dest_scan ++; |
| 4347 *dest_scan++ = dest_alpha; | 4347 *dest_scan++ = dest_alpha; |
| 4348 } | 4348 } |
| 4349 } else { | 4349 } else { |
| 4350 FX_LPBYTE dest_scan_alpha = (FX_LPBYTE)m_pAlphaMask->GetScanline
(row) + rect.left; | 4350 FX_LPBYTE dest_scan_alpha = (FX_LPBYTE)m_pAlphaMask->GetScanline
(row) + rect.left; |
| 4351 for (int col = 0; col < width; col ++) { | 4351 for (int col = 0; col < width; col ++) { |
| 4352 FX_BYTE back_alpha = *dest_scan_alpha; | 4352 uint8_t back_alpha = *dest_scan_alpha; |
| 4353 if (back_alpha == 0) { | 4353 if (back_alpha == 0) { |
| 4354 *dest_scan_alpha++ = src_alpha; | 4354 *dest_scan_alpha++ = src_alpha; |
| 4355 FXSYS_memcpy32(dest_scan, color_p, Bpp); | 4355 FXSYS_memcpy32(dest_scan, color_p, Bpp); |
| 4356 dest_scan += Bpp; | 4356 dest_scan += Bpp; |
| 4357 continue; | 4357 continue; |
| 4358 } | 4358 } |
| 4359 FX_BYTE dest_alpha = back_alpha + src_alpha - back_alpha * s
rc_alpha / 255; | 4359 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * s
rc_alpha / 255; |
| 4360 *dest_scan_alpha ++ = dest_alpha; | 4360 *dest_scan_alpha ++ = dest_alpha; |
| 4361 int alpha_ratio = src_alpha * 255 / dest_alpha; | 4361 int alpha_ratio = src_alpha * 255 / dest_alpha; |
| 4362 for(int comps = 0; comps < Bpp; comps ++) { | 4362 for(int comps = 0; comps < Bpp; comps ++) { |
| 4363 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps
], alpha_ratio); | 4363 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, color_p[comps
], alpha_ratio); |
| 4364 dest_scan ++; | 4364 dest_scan ++; |
| 4365 } | 4365 } |
| 4366 } | 4366 } |
| 4367 } | 4367 } |
| 4368 } else { | 4368 } else { |
| 4369 for (int col = 0; col < width; col ++) { | 4369 for (int col = 0; col < width; col ++) { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4430 m_BlendType = blend_type; | 4430 m_BlendType = blend_type; |
| 4431 } | 4431 } |
| 4432 FX_BOOL CFX_BitmapComposer::SetInfo(int width, int height, FXDIB_Format src_form
at, FX_DWORD* pSrcPalette) | 4432 FX_BOOL CFX_BitmapComposer::SetInfo(int width, int height, FXDIB_Format src_form
at, FX_DWORD* pSrcPalette) |
| 4433 { | 4433 { |
| 4434 m_SrcFormat = src_format; | 4434 m_SrcFormat = src_format; |
| 4435 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalett
e, m_MaskColor, FXDIB_BLEND_NORMAL, | 4435 if (!m_Compositor.Init(m_pBitmap->GetFormat(), src_format, width, pSrcPalett
e, m_MaskColor, FXDIB_BLEND_NORMAL, |
| 4436 m_pClipMask != NULL || (m_BitmapAlpha < 255), m_bRgbB
yteOrder, m_AlphaFlag, m_pIccTransform)) { | 4436 m_pClipMask != NULL || (m_BitmapAlpha < 255), m_bRgbB
yteOrder, m_AlphaFlag, m_pIccTransform)) { |
| 4437 return FALSE; | 4437 return FALSE; |
| 4438 } | 4438 } |
| 4439 if (m_bVertical) { | 4439 if (m_bVertical) { |
| 4440 m_pScanlineV = FX_Alloc(FX_BYTE, m_pBitmap->GetBPP() / 8 * width + 4); | 4440 m_pScanlineV = FX_Alloc(uint8_t, m_pBitmap->GetBPP() / 8 * width + 4); |
| 4441 m_pClipScanV = FX_Alloc(FX_BYTE, m_pBitmap->GetHeight()); | 4441 m_pClipScanV = FX_Alloc(uint8_t, m_pBitmap->GetHeight()); |
| 4442 if (m_pBitmap->m_pAlphaMask) { | 4442 if (m_pBitmap->m_pAlphaMask) { |
| 4443 m_pScanlineAlphaV = FX_Alloc(FX_BYTE, width + 4); | 4443 m_pScanlineAlphaV = FX_Alloc(uint8_t, width + 4); |
| 4444 } | 4444 } |
| 4445 } | 4445 } |
| 4446 if (m_BitmapAlpha < 255) { | 4446 if (m_BitmapAlpha < 255) { |
| 4447 m_pAddClipScan = FX_Alloc(FX_BYTE, m_bVertical ? m_pBitmap->GetHeight()
: m_pBitmap->GetWidth()); | 4447 m_pAddClipScan = FX_Alloc(uint8_t, m_bVertical ? m_pBitmap->GetHeight()
: m_pBitmap->GetWidth()); |
| 4448 } | 4448 } |
| 4449 return TRUE; | 4449 return TRUE; |
| 4450 } | 4450 } |
| 4451 void CFX_BitmapComposer::DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
dest_width, FX_LPCBYTE clip_scan, | 4451 void CFX_BitmapComposer::DoCompose(FX_LPBYTE dest_scan, FX_LPCBYTE src_scan, int
dest_width, FX_LPCBYTE clip_scan, |
| 4452 FX_LPCBYTE src_extra_alpha, FX_LPBYTE dst_ext
ra_alpha) | 4452 FX_LPCBYTE src_extra_alpha, FX_LPBYTE dst_ext
ra_alpha) |
| 4453 { | 4453 { |
| 4454 if (m_BitmapAlpha < 255) { | 4454 if (m_BitmapAlpha < 255) { |
| 4455 if (clip_scan) { | 4455 if (clip_scan) { |
| 4456 for (int i = 0; i < dest_width; i ++) { | 4456 for (int i = 0; i < dest_width; i ++) { |
| 4457 m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255; | 4457 m_pAddClipScan[i] = clip_scan[i] * m_BitmapAlpha / 255; |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4547 } | 4547 } |
| 4548 src_alpha_scan = m_pScanlineAlphaV; | 4548 src_alpha_scan = m_pScanlineAlphaV; |
| 4549 dest_alpha_scan = dest_alpha_buf; | 4549 dest_alpha_scan = dest_alpha_buf; |
| 4550 if (dest_alpha_scan) { | 4550 if (dest_alpha_scan) { |
| 4551 for (i = 0; i < m_DestHeight; i ++) { | 4551 for (i = 0; i < m_DestHeight; i ++) { |
| 4552 *dest_alpha_scan = *src_alpha_scan++; | 4552 *dest_alpha_scan = *src_alpha_scan++; |
| 4553 dest_alpha_scan += y_alpha_step; | 4553 dest_alpha_scan += y_alpha_step; |
| 4554 } | 4554 } |
| 4555 } | 4555 } |
| 4556 } | 4556 } |
| OLD | NEW |