OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2015 Google Inc. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license that can be | |
5 * found in the LICENSE file. | |
6 */ | |
7 | |
8 #include "SkBitmapRegionCanvas.h" | |
9 #include "SkBitmapRegionDecoderInterface.h" | |
10 #include "SkBitmapRegionSampler.h" | |
11 #include "SkScanlineDecoder.h" | |
12 #include "SkImageDecoder.h" | |
13 | |
14 SkBitmapRegionDecoderInterface* SkBitmapRegionDecoderInterface::CreateBitmapRegi
onDecoder( | |
15 SkStreamRewindable* stream, Strategy strategy) { | |
16 switch (strategy) { | |
17 case kOriginal_Strategy: { | |
18 SkImageDecoder* decoder = SkImageDecoder::Factory(stream); | |
19 int width, height; | |
20 if (nullptr == decoder) { | |
21 SkDebugf("Error: Could not create image decoder.\n"); | |
22 return nullptr; | |
23 } | |
24 if (!decoder->buildTileIndex(stream, &width, &height)) { | |
25 SkDebugf("Error: Could not build tile index.\n"); | |
26 delete decoder; | |
27 return nullptr; | |
28 } | |
29 return new SkBitmapRegionSampler(decoder, width, height); | |
30 } | |
31 case kCanvas_Strategy: { | |
32 SkScanlineDecoder* decoder = SkScanlineDecoder::NewFromStream(stream
); | |
33 if (nullptr == decoder) { | |
34 SkDebugf("Error: Failed to create decoder.\n"); | |
35 return nullptr; | |
36 } | |
37 switch (decoder->getScanlineOrder()) { | |
38 case SkScanlineDecoder::kTopDown_SkScanlineOrder: | |
39 case SkScanlineDecoder::kNone_SkScanlineOrder: | |
40 break; | |
41 default: | |
42 SkDebugf("Error: Scanline ordering not supported.\n"); | |
43 return nullptr; | |
44 } | |
45 return new SkBitmapRegionCanvas(decoder); | |
46 } | |
47 default: | |
48 SkASSERT(false); | |
49 return nullptr; | |
50 } | |
51 } | |
OLD | NEW |