OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 The Android Open Source Project | 2 * Copyright 2010 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 "SkPDFImage.h" | 8 #include "SkPDFImage.h" |
9 | 9 |
10 #include "SkBitmap.h" | 10 #include "SkBitmap.h" |
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
505 fEncoder(encoder) { | 505 fEncoder(encoder) { |
506 | 506 |
507 if (bitmap.isImmutable()) { | 507 if (bitmap.isImmutable()) { |
508 fBitmap = bitmap; | 508 fBitmap = bitmap; |
509 } else { | 509 } else { |
510 bitmap.deepCopyTo(&fBitmap); | 510 bitmap.deepCopyTo(&fBitmap); |
511 fBitmap.setImmutable(); | 511 fBitmap.setImmutable(); |
512 } | 512 } |
513 | 513 |
514 if (stream != NULL) { | 514 if (stream != NULL) { |
515 setData(stream); | 515 this->setData(stream); |
516 fStreamValid = true; | 516 fStreamValid = true; |
517 } else { | 517 } else { |
518 fStreamValid = false; | 518 fStreamValid = false; |
519 } | 519 } |
520 | 520 |
521 SkColorType colorType = fBitmap.colorType(); | 521 SkColorType colorType = fBitmap.colorType(); |
522 | 522 |
523 insertName("Type", "XObject"); | 523 insertName("Type", "XObject"); |
524 insertName("Subtype", "Image"); | 524 insertName("Subtype", "Image"); |
525 | 525 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
591 get_uncompressed_size(fBitmap, fSrcRect) > 1) { | 591 get_uncompressed_size(fBitmap, fSrcRect) > 1) { |
592 SkBitmap subset; | 592 SkBitmap subset; |
593 // Extract subset | 593 // Extract subset |
594 if (!fBitmap.extractSubset(&subset, fSrcRect)) { | 594 if (!fBitmap.extractSubset(&subset, fSrcRect)) { |
595 return false; | 595 return false; |
596 } | 596 } |
597 size_t pixelRefOffset = 0; | 597 size_t pixelRefOffset = 0; |
598 SkAutoTUnref<SkData> data(fEncoder(&pixelRefOffset, subset)); | 598 SkAutoTUnref<SkData> data(fEncoder(&pixelRefOffset, subset)); |
599 if (data.get() && data->size() < get_uncompressed_size(fBitmap, | 599 if (data.get() && data->size() < get_uncompressed_size(fBitmap, |
600 fSrcRect)) { | 600 fSrcRect)) { |
601 SkAutoTUnref<SkStream> stream(SkNEW_ARGS(SkMemoryStream, | 601 this->setData(data.get()); |
602 (data))); | |
603 setData(stream.get()); | |
604 | 602 |
605 insertName("Filter", "DCTDecode"); | 603 insertName("Filter", "DCTDecode"); |
606 insertInt("ColorTransform", kNoColorTransform); | 604 insertInt("ColorTransform", kNoColorTransform); |
607 insertInt("Length", getData()->getLength()); | 605 insertInt("Length", this->dataSize()); |
608 setState(kCompressed_State); | 606 setState(kCompressed_State); |
609 return true; | 607 return true; |
610 } | 608 } |
611 } | 609 } |
612 // Fallback method | 610 // Fallback method |
613 if (!fStreamValid) { | 611 if (!fStreamValid) { |
614 SkAutoTUnref<SkStream> stream( | 612 SkAutoTUnref<SkStream> stream( |
615 extract_image_data(fBitmap, fSrcRect, fIsAlpha, NULL)); | 613 extract_image_data(fBitmap, fSrcRect, fIsAlpha, NULL)); |
616 setData(stream); | 614 this->setData(stream); |
617 fStreamValid = true; | 615 fStreamValid = true; |
618 } | 616 } |
619 return INHERITED::populate(catalog); | 617 return INHERITED::populate(catalog); |
620 } else if (getState() == kNoCompression_State && | 618 } else if (getState() == kNoCompression_State && |
621 !skip_compression(catalog) && | 619 !skip_compression(catalog) && |
622 (SkFlate::HaveFlate() || fEncoder)) { | 620 (SkFlate::HaveFlate() || fEncoder)) { |
623 // Compression has not been requested when the stream was first created, | 621 // Compression has not been requested when the stream was first created, |
624 // but the new catalog wants it compressed. | 622 // but the new catalog wants it compressed. |
625 if (!getSubstitute()) { | 623 if (!getSubstitute()) { |
626 SkPDFStream* substitute = SkNEW_ARGS(SkPDFImage, (*this)); | 624 SkPDFStream* substitute = SkNEW_ARGS(SkPDFImage, (*this)); |
627 setSubstitute(substitute); | 625 setSubstitute(substitute); |
628 catalog->setSubstitute(this, substitute); | 626 catalog->setSubstitute(this, substitute); |
629 } | 627 } |
630 return false; | 628 return false; |
631 } | 629 } |
632 return true; | 630 return true; |
633 } | 631 } |
OLD | NEW |