@@ -135,14 +135,37 @@ internal class SVGAVideoShapeEntity {
135
135
this .args = args
136
136
}
137
137
138
+ // 检查色域范围是否是 [0f, 1f],或者是 [0f, 255f]
139
+ private fun checkValueRange (obj : JSONArray ): Float {
140
+ return if (
141
+ obj.optDouble(0 ) <= 1 &&
142
+ obj.optDouble(1 ) <= 1 &&
143
+ obj.optDouble(2 ) <= 1
144
+ ) {
145
+ 255f
146
+ } else {
147
+ 1f
148
+ }
149
+ }
150
+
151
+ // 检查 alpha 的范围是否是 [0f, 1f],或者是 [0f, 255f]
152
+ private fun checkAlphaValueRange (obj : JSONArray ): Float {
153
+ return if (obj.optDouble(3 ) <= 1 ) {
154
+ 255f
155
+ } else {
156
+ 1f
157
+ }
158
+ }
159
+
138
160
private fun parseStyles (obj : JSONObject ) {
139
161
obj.optJSONObject(" styles" )?.let {
140
162
val styles = Styles ()
141
163
it.optJSONArray(" fill" )?.let {
142
164
if (it.length() == 4 ) {
143
165
val mulValue = checkValueRange(it)
166
+ val alphaRangeValue = checkAlphaValueRange(it)
144
167
styles.fill = Color .argb(
145
- (it.optDouble(3 ) * mulValue ).toInt(),
168
+ (it.optDouble(3 ) * alphaRangeValue ).toInt(),
146
169
(it.optDouble(0 ) * mulValue).toInt(),
147
170
(it.optDouble(1 ) * mulValue).toInt(),
148
171
(it.optDouble(2 ) * mulValue).toInt()
@@ -152,8 +175,9 @@ internal class SVGAVideoShapeEntity {
152
175
it.optJSONArray(" stroke" )?.let {
153
176
if (it.length() == 4 ) {
154
177
val mulValue = checkValueRange(it)
178
+ val alphaRangeValue = checkAlphaValueRange(it)
155
179
styles.stroke = Color .argb(
156
- (it.optDouble(3 ) * mulValue ).toInt(),
180
+ (it.optDouble(3 ) * alphaRangeValue ).toInt(),
157
181
(it.optDouble(0 ) * mulValue).toInt(),
158
182
(it.optDouble(1 ) * mulValue).toInt(),
159
183
(it.optDouble(2 ) * mulValue).toInt()
@@ -174,36 +198,46 @@ internal class SVGAVideoShapeEntity {
174
198
}
175
199
}
176
200
177
- // 检查色域范围是否是 0-1
178
- private fun checkValueRange (obj : JSONArray ): Float {
201
+ // 检查色域范围是否是 [0f, 1f],或者是 [0f, 255f]
202
+ private fun checkValueRange (color : ShapeEntity . ShapeStyle . RGBAColor ): Float {
179
203
return if (
180
- obj.optDouble(3 ) <= 1 &&
181
- obj.optDouble(0 ) <= 1 &&
182
- obj.optDouble(1 ) <= 1 &&
183
- obj.optDouble(2 ) <= 1
204
+ (color.r ? : 0f ) <= 1 &&
205
+ (color.g ? : 0f ) <= 1 &&
206
+ (color.b ? : 0f ) <= 1
184
207
) {
185
208
255f
186
209
} else {
187
210
1f
188
211
}
189
212
}
190
213
214
+ // 检查 alpha 范围是否是 [0f, 1f],有可能是 [0f, 255f]
215
+ private fun checkAlphaValueRange (color : ShapeEntity .ShapeStyle .RGBAColor ): Float {
216
+ return if (color.a <= 1f ) {
217
+ 255f
218
+ } else {
219
+ 1f
220
+ }
221
+ }
222
+
191
223
private fun parseStyles (obj : ShapeEntity ) {
192
224
obj.styles?.let {
193
225
val styles = Styles ()
194
226
it.fill?.let {
195
227
val mulValue = checkValueRange(it)
228
+ val alphaRangeValue = checkAlphaValueRange(it)
196
229
styles.fill = Color .argb(
197
- ((it.a ? : 0f ) * mulValue ).toInt(),
230
+ ((it.a ? : 0f ) * alphaRangeValue ).toInt(),
198
231
((it.r ? : 0f ) * mulValue).toInt(),
199
232
((it.g ? : 0f ) * mulValue).toInt(),
200
233
((it.b ? : 0f ) * mulValue).toInt()
201
234
)
202
235
}
203
236
it.stroke?.let {
204
237
val mulValue = checkValueRange(it)
238
+ val alphaRangeValue = checkAlphaValueRange(it)
205
239
styles.stroke = Color .argb(
206
- ((it.a ? : 0f ) * mulValue ).toInt(),
240
+ ((it.a ? : 0f ) * alphaRangeValue ).toInt(),
207
241
((it.r ? : 0f ) * mulValue).toInt(),
208
242
((it.g ? : 0f ) * mulValue).toInt(),
209
243
((it.b ? : 0f ) * mulValue).toInt()
@@ -234,20 +268,6 @@ internal class SVGAVideoShapeEntity {
234
268
}
235
269
}
236
270
237
- // 检查色域范围是否是 0-1
238
- private fun checkValueRange (color : ShapeEntity .ShapeStyle .RGBAColor ): Float {
239
- return if (
240
- (color.a ? : 0f ) <= 1 &&
241
- (color.r ? : 0f ) <= 1 &&
242
- (color.g ? : 0f ) <= 1 &&
243
- (color.b ? : 0f ) <= 1
244
- ) {
245
- 255f
246
- } else {
247
- 1f
248
- }
249
- }
250
-
251
271
private fun parseTransform (obj : JSONObject ) {
252
272
obj.optJSONObject(" transform" )?.let {
253
273
val transform = Matrix ()
0 commit comments