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 "DMSrcSink.h" | 8 #include "DMSrcSink.h" |
9 #include "SkAndroidCodec.h" | 9 #include "SkAndroidCodec.h" |
10 #include "SkCodec.h" | 10 #include "SkCodec.h" |
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
576 // where the last one ended. So we'll add decodeInfo.width() and hei ght(). | 576 // where the last one ended. So we'll add decodeInfo.width() and hei ght(). |
577 int left = 0; | 577 int left = 0; |
578 for (int x = 0; x < W; x += w) { | 578 for (int x = 0; x < W; x += w) { |
579 int top = 0; | 579 int top = 0; |
580 for (int y = 0; y < H; y+= h) { | 580 for (int y = 0; y < H; y+= h) { |
581 // Do not make the subset go off the edge of the image. | 581 // Do not make the subset go off the edge of the image. |
582 const int preScaleW = SkTMin(w, W - x); | 582 const int preScaleW = SkTMin(w, W - x); |
583 const int preScaleH = SkTMin(h, H - y); | 583 const int preScaleH = SkTMin(h, H - y); |
584 subset.setXYWH(x, y, preScaleW, preScaleH); | 584 subset.setXYWH(x, y, preScaleW, preScaleH); |
585 // And scale | 585 // And scale |
586 // FIXME: Should we have a version of getScaledDimensions th at takes a subset | 586 // FIXME: Should we have a version of getScaledDimensions th at takes a subset |
msarett
2016/04/25 13:25:50
This may be worth fixing in a follow-up. We do ha
| |
587 // into account? | 587 // into account? |
588 decodeInfo = decodeInfo.makeWH( | 588 const int scaledW = SkTMax(1, SkScalarRoundToInt(preScaleW * fScale)); |
589 SkTMax(1, SkScalarRoundToInt(preScaleW * fScale)), | 589 const int scaledH = SkTMax(1, SkScalarRoundToInt(preScaleH * fScale)); |
590 SkTMax(1, SkScalarRoundToInt(preScaleH * fScale))); | 590 decodeInfo = decodeInfo.makeWH(scaledW, scaledH); |
591 size_t rowBytes = decodeInfo.minRowBytes(); | 591 SkImageInfo subsetBitmapInfo = bitmapInfo.makeWH(scaledW, sc aledH); |
592 if (!subsetBm.installPixels(decodeInfo, pixels, rowBytes, co lorTable.get(), | 592 size_t rowBytes = subsetBitmapInfo.minRowBytes(); |
593 if (!subsetBm.installPixels(subsetBitmapInfo, pixels, rowByt es, colorTable.get(), | |
593 nullptr, nullptr)) { | 594 nullptr, nullptr)) { |
594 return SkStringPrintf("could not install pixels for %s." , fPath.c_str()); | 595 return SkStringPrintf("could not install pixels for %s." , fPath.c_str()); |
595 } | 596 } |
596 const SkCodec::Result result = codec->getPixels(decodeInfo, pixels, rowBytes, | 597 const SkCodec::Result result = codec->getPixels(decodeInfo, pixels, rowBytes, |
597 &opts, colorPtr, colorCountPtr); | 598 &opts, colorPtr, colorCountPtr); |
598 switch (result) { | 599 switch (result) { |
599 case SkCodec::kSuccess: | 600 case SkCodec::kSuccess: |
600 case SkCodec::kIncompleteInput: | 601 case SkCodec::kIncompleteInput: |
601 break; | 602 break; |
602 default: | 603 default: |
603 return SkStringPrintf("subset codec failed to decode (%d, %d, %d, %d) " | 604 return SkStringPrintf("subset codec failed to decode (%d, %d, %d, %d) " |
604 "from %s with dimensions (%d x %d)\t error %d", | 605 "from %s with dimensions (%d x %d)\t error %d", |
605 x, y, decodeInfo.width(), deco deInfo.height(), | 606 x, y, decodeInfo.width(), deco deInfo.height(), |
606 fPath.c_str(), W, H, result); | 607 fPath.c_str(), W, H, result); |
607 } | 608 } |
608 premultiply_if_necessary(subsetBm); | 609 premultiply_if_necessary(subsetBm); |
609 swap_rb_if_necessary(bitmap, fDstColorType); | 610 swap_rb_if_necessary(subsetBm, fDstColorType); |
610 canvas->drawBitmap(subsetBm, SkIntToScalar(left), SkIntToSca lar(top)); | 611 canvas->drawBitmap(subsetBm, SkIntToScalar(left), SkIntToSca lar(top)); |
611 // translate by the scaled height. | 612 // translate by the scaled height. |
612 top += decodeInfo.height(); | 613 top += decodeInfo.height(); |
613 } | 614 } |
614 // translate by the scaled width. | 615 // translate by the scaled width. |
615 left += decodeInfo.width(); | 616 left += decodeInfo.width(); |
616 } | 617 } |
617 return ""; | 618 return ""; |
618 } | 619 } |
619 default: | 620 default: |
(...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1498 skr.visit(i, drawsAsSingletonPictures); | 1499 skr.visit(i, drawsAsSingletonPictures); |
1499 } | 1500 } |
1500 sk_sp<SkPicture> macroPic(macroRec.finishRecordingAsPicture()); | 1501 sk_sp<SkPicture> macroPic(macroRec.finishRecordingAsPicture()); |
1501 | 1502 |
1502 canvas->drawPicture(macroPic); | 1503 canvas->drawPicture(macroPic); |
1503 return check_against_reference(bitmap, src, fSink); | 1504 return check_against_reference(bitmap, src, fSink); |
1504 }); | 1505 }); |
1505 } | 1506 } |
1506 | 1507 |
1507 } // namespace DM | 1508 } // namespace DM |
OLD | NEW |