OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2008 The Android Open Source Project | 2 * Copyright 2008 The Android Open Source Project |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #include "SkAtomics.h" | 8 #include "SkAtomics.h" |
9 #include "SkBitmap.h" | 9 #include "SkBitmap.h" |
10 #include "SkColorPriv.h" | 10 #include "SkColorPriv.h" |
(...skipping 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 for (int y = height - 1; y >= 1; --y) { | 1138 for (int y = height - 1; y >= 1; --y) { |
1139 memmove(dstRow, srcRow, snugRB); | 1139 memmove(dstRow, srcRow, snugRB); |
1140 srcRow -= snugRB; | 1140 srcRow -= snugRB; |
1141 dstRow -= ramRB; | 1141 dstRow -= ramRB; |
1142 } | 1142 } |
1143 SkASSERT(srcRow == dstRow); // first row does not need to be moved | 1143 SkASSERT(srcRow == dstRow); // first row does not need to be moved |
1144 } | 1144 } |
1145 | 1145 |
1146 SkAutoTUnref<SkColorTable> ctable; | 1146 SkAutoTUnref<SkColorTable> ctable; |
1147 if (buffer->readBool()) { | 1147 if (buffer->readBool()) { |
1148 ctable.reset(new SkColorTable(*buffer)); | 1148 ctable.reset(SkColorTable::Create(*buffer)); |
| 1149 if (!ctable) { |
| 1150 return false; |
| 1151 } |
1149 | 1152 |
1150 unsigned char maxIndex = ctable->count() ? ctable->count()-1 : 0; | 1153 if (info.isEmpty()) { |
1151 for (uint64_t i = 0; i < ramSize; ++i) { | 1154 // require an empty ctable |
1152 dst[i] = SkTMin(dst[i], maxIndex); | 1155 if (ctable->count() != 0) { |
| 1156 buffer->validate(false); |
| 1157 return false; |
| 1158 } |
| 1159 } else { |
| 1160 // require a non-empty ctable |
| 1161 if (ctable->count() == 0) { |
| 1162 buffer->validate(false); |
| 1163 return false; |
| 1164 } |
| 1165 unsigned char maxIndex = ctable->count() - 1; |
| 1166 for (uint64_t i = 0; i < ramSize; ++i) { |
| 1167 dst[i] = SkTMin(dst[i], maxIndex); |
| 1168 } |
1153 } | 1169 } |
1154 } | 1170 } |
1155 | 1171 |
1156 SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewWithData(info, info.minRowB
ytes(), | 1172 SkAutoTUnref<SkPixelRef> pr(SkMallocPixelRef::NewWithData(info, info.minRowB
ytes(), |
1157 ctable.get(), data
.get())); | 1173 ctable.get(), data
.get())); |
1158 if (!pr.get()) { | 1174 if (!pr.get()) { |
1159 return false; | 1175 return false; |
1160 } | 1176 } |
1161 bitmap->setInfo(pr->info()); | 1177 bitmap->setInfo(pr->info()); |
1162 bitmap->setPixelRef(pr, 0, 0); | 1178 bitmap->setPixelRef(pr, 0, 0); |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1300 /////////////////////////////////////////////////////////////////////////////// | 1316 /////////////////////////////////////////////////////////////////////////////// |
1301 | 1317 |
1302 #ifdef SK_DEBUG | 1318 #ifdef SK_DEBUG |
1303 void SkImageInfo::validate() const { | 1319 void SkImageInfo::validate() const { |
1304 SkASSERT(fWidth >= 0); | 1320 SkASSERT(fWidth >= 0); |
1305 SkASSERT(fHeight >= 0); | 1321 SkASSERT(fHeight >= 0); |
1306 SkASSERT(SkColorTypeIsValid(fColorType)); | 1322 SkASSERT(SkColorTypeIsValid(fColorType)); |
1307 SkASSERT(SkAlphaTypeIsValid(fAlphaType)); | 1323 SkASSERT(SkAlphaTypeIsValid(fAlphaType)); |
1308 } | 1324 } |
1309 #endif | 1325 #endif |
OLD | NEW |