OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 Google Inc. |
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 "SkBmpCodec.h" | 8 #include "SkBmpCodec.h" |
9 #include "SkBmpMaskCodec.h" | 9 #include "SkBmpMaskCodec.h" |
10 #include "SkBmpRLECodec.h" | 10 #include "SkBmpRLECodec.h" |
(...skipping 491 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 *codecOut = new SkBmpStandardCodec(imageInfo, stream, bitsPerPix
el, numColors, | 502 *codecOut = new SkBmpStandardCodec(imageInfo, stream, bitsPerPix
el, numColors, |
503 bytesPerColor, offset - bytesRead, rowOrder, isOpaque, i
nIco); | 503 bytesPerColor, offset - bytesRead, rowOrder, isOpaque, i
nIco); |
504 return true; | 504 return true; |
505 case kBitMask_BmpInputFormat: | 505 case kBitMask_BmpInputFormat: |
506 // Bmp-in-Ico must be standard mode | 506 // Bmp-in-Ico must be standard mode |
507 if (inIco) { | 507 if (inIco) { |
508 SkCodecPrintf("Error: Icos may not use bit mask format.\n"); | 508 SkCodecPrintf("Error: Icos may not use bit mask format.\n"); |
509 return false; | 509 return false; |
510 } | 510 } |
511 | 511 |
512 *codecOut = new SkBmpMaskCodec(imageInfo, stream, bitsPerPixel,
masks.detach(), | 512 *codecOut = new SkBmpMaskCodec(imageInfo, stream, bitsPerPixel,
masks.release(), |
513 rowOrder); | 513 rowOrder); |
514 return true; | 514 return true; |
515 case kRLE_BmpInputFormat: | 515 case kRLE_BmpInputFormat: |
516 // Bmp-in-Ico must be standard mode | 516 // Bmp-in-Ico must be standard mode |
517 // When inIco is true, this line cannot be reached, since we | 517 // When inIco is true, this line cannot be reached, since we |
518 // require that RLE Bmps have a valid number of totalBytes, and | 518 // require that RLE Bmps have a valid number of totalBytes, and |
519 // Icos skip the header that contains totalBytes. | 519 // Icos skip the header that contains totalBytes. |
520 SkASSERT(!inIco); | 520 SkASSERT(!inIco); |
521 *codecOut = new SkBmpRLECodec(imageInfo, stream, bitsPerPixel, n
umColors, | 521 *codecOut = new SkBmpRLECodec(imageInfo, stream, bitsPerPixel, n
umColors, |
522 bytesPerColor, offset - bytesRead, rowOrder, RLEBytes); | 522 bytesPerColor, offset - bytesRead, rowOrder, RLEBytes); |
(...skipping 11 matching lines...) Expand all Loading... |
534 * Creates a bmp decoder | 534 * Creates a bmp decoder |
535 * Reads enough of the stream to determine the image format | 535 * Reads enough of the stream to determine the image format |
536 */ | 536 */ |
537 SkCodec* SkBmpCodec::NewFromStream(SkStream* stream, bool inIco) { | 537 SkCodec* SkBmpCodec::NewFromStream(SkStream* stream, bool inIco) { |
538 SkAutoTDelete<SkStream> streamDeleter(stream); | 538 SkAutoTDelete<SkStream> streamDeleter(stream); |
539 SkCodec* codec = nullptr; | 539 SkCodec* codec = nullptr; |
540 if (ReadHeader(stream, inIco, &codec)) { | 540 if (ReadHeader(stream, inIco, &codec)) { |
541 // codec has taken ownership of stream, so we do not need to | 541 // codec has taken ownership of stream, so we do not need to |
542 // delete it. | 542 // delete it. |
543 SkASSERT(codec); | 543 SkASSERT(codec); |
544 streamDeleter.detach(); | 544 streamDeleter.release(); |
545 return codec; | 545 return codec; |
546 } | 546 } |
547 return nullptr; | 547 return nullptr; |
548 } | 548 } |
549 | 549 |
550 SkBmpCodec::SkBmpCodec(const SkImageInfo& info, SkStream* stream, | 550 SkBmpCodec::SkBmpCodec(const SkImageInfo& info, SkStream* stream, |
551 uint16_t bitsPerPixel, SkCodec::SkScanlineOrder rowOrder) | 551 uint16_t bitsPerPixel, SkCodec::SkScanlineOrder rowOrder) |
552 : INHERITED(info, stream) | 552 : INHERITED(info, stream) |
553 , fBitsPerPixel(bitsPerPixel) | 553 , fBitsPerPixel(bitsPerPixel) |
554 , fRowOrder(rowOrder) | 554 , fRowOrder(rowOrder) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
586 } | 586 } |
587 | 587 |
588 bool SkBmpCodec::skipRows(int count) { | 588 bool SkBmpCodec::skipRows(int count) { |
589 const size_t bytesToSkip = count * fSrcRowBytes; | 589 const size_t bytesToSkip = count * fSrcRowBytes; |
590 return this->stream()->skip(bytesToSkip) == bytesToSkip; | 590 return this->stream()->skip(bytesToSkip) == bytesToSkip; |
591 } | 591 } |
592 | 592 |
593 bool SkBmpCodec::onSkipScanlines(int count) { | 593 bool SkBmpCodec::onSkipScanlines(int count) { |
594 return this->skipRows(count); | 594 return this->skipRows(count); |
595 } | 595 } |
OLD | NEW |