OLD | NEW |
1 | 1 |
2 /* | 2 /* |
3 * Copyright 2008 The Android Open Source Project | 3 * Copyright 2008 The Android Open Source Project |
4 * | 4 * |
5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
7 */ | 7 */ |
8 | 8 |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 1257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1268 bitmap->setInfo(pr->info()); | 1268 bitmap->setInfo(pr->info()); |
1269 bitmap->setPixelRef(pr, 0, 0); | 1269 bitmap->setPixelRef(pr, 0, 0); |
1270 return true; | 1270 return true; |
1271 } | 1271 } |
1272 | 1272 |
1273 enum { | 1273 enum { |
1274 SERIALIZE_PIXELTYPE_NONE, | 1274 SERIALIZE_PIXELTYPE_NONE, |
1275 SERIALIZE_PIXELTYPE_REF_DATA | 1275 SERIALIZE_PIXELTYPE_REF_DATA |
1276 }; | 1276 }; |
1277 | 1277 |
1278 void SkBitmap::legacyUnflatten(SkReadBuffer& buffer) { | |
1279 #ifdef SK_SUPPORT_LEGACY_PIXELREF_UNFLATTENABLE | |
1280 this->reset(); | |
1281 | |
1282 SkImageInfo info; | |
1283 info.unflatten(buffer); | |
1284 size_t rowBytes = buffer.readInt(); | |
1285 if (!buffer.validate((info.width() >= 0) && (info.height() >= 0) && | |
1286 SkColorTypeIsValid(info.fColorType) && | |
1287 SkAlphaTypeIsValid(info.fAlphaType) && | |
1288 SkColorTypeValidateAlphaType(info.fColorType, info.fAlp
haType) && | |
1289 info.validRowBytes(rowBytes))) { | |
1290 return; | |
1291 } | |
1292 | |
1293 bool configIsValid = this->setInfo(info, rowBytes); | |
1294 buffer.validate(configIsValid); | |
1295 | |
1296 int reftype = buffer.readInt(); | |
1297 if (buffer.validate((SERIALIZE_PIXELTYPE_REF_DATA == reftype) || | |
1298 (SERIALIZE_PIXELTYPE_NONE == reftype))) { | |
1299 switch (reftype) { | |
1300 case SERIALIZE_PIXELTYPE_REF_DATA: { | |
1301 SkIPoint origin; | |
1302 origin.fX = buffer.readInt(); | |
1303 origin.fY = buffer.readInt(); | |
1304 size_t offset = origin.fY * rowBytes + origin.fX * info.bytesPer
Pixel(); | |
1305 SkPixelRef* pr = buffer.readFlattenable<SkPixelRef>(); | |
1306 if (!buffer.validate((NULL == pr) || | |
1307 (pr->getAllocatedSizeInBytes() >= (offset + this->getSafe
Size())))) { | |
1308 origin.setZero(); | |
1309 } | |
1310 SkSafeUnref(this->setPixelRef(pr, origin)); | |
1311 break; | |
1312 } | |
1313 case SERIALIZE_PIXELTYPE_NONE: | |
1314 break; | |
1315 default: | |
1316 SkDEBUGFAIL("unrecognized pixeltype in serialized data"); | |
1317 sk_throw(); | |
1318 } | |
1319 } | |
1320 #else | |
1321 sk_throw(); | |
1322 #endif | |
1323 } | |
1324 | |
1325 /////////////////////////////////////////////////////////////////////////////// | 1278 /////////////////////////////////////////////////////////////////////////////// |
1326 | 1279 |
1327 SkBitmap::RLEPixels::RLEPixels(int width, int height) { | 1280 SkBitmap::RLEPixels::RLEPixels(int width, int height) { |
1328 fHeight = height; | 1281 fHeight = height; |
1329 fYPtrs = (uint8_t**)sk_calloc_throw(height * sizeof(uint8_t*)); | 1282 fYPtrs = (uint8_t**)sk_calloc_throw(height * sizeof(uint8_t*)); |
1330 } | 1283 } |
1331 | 1284 |
1332 SkBitmap::RLEPixels::~RLEPixels() { | 1285 SkBitmap::RLEPixels::~RLEPixels() { |
1333 sk_free(fYPtrs); | 1286 sk_free(fYPtrs); |
1334 } | 1287 } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1412 /////////////////////////////////////////////////////////////////////////////// | 1365 /////////////////////////////////////////////////////////////////////////////// |
1413 | 1366 |
1414 #ifdef SK_DEBUG | 1367 #ifdef SK_DEBUG |
1415 void SkImageInfo::validate() const { | 1368 void SkImageInfo::validate() const { |
1416 SkASSERT(fWidth >= 0); | 1369 SkASSERT(fWidth >= 0); |
1417 SkASSERT(fHeight >= 0); | 1370 SkASSERT(fHeight >= 0); |
1418 SkASSERT(SkColorTypeIsValid(fColorType)); | 1371 SkASSERT(SkColorTypeIsValid(fColorType)); |
1419 SkASSERT(SkAlphaTypeIsValid(fAlphaType)); | 1372 SkASSERT(SkAlphaTypeIsValid(fAlphaType)); |
1420 } | 1373 } |
1421 #endif | 1374 #endif |
OLD | NEW |