|
17 | 17 | public class InlineImage : IPdfImage |
18 | 18 | { |
19 | 19 | private readonly Lazy<Memory<byte>>? memoryFactory; |
| 20 | + private readonly Memory<byte> rawMemory; |
20 | 21 |
|
21 | 22 | /// <inheritdoc /> |
22 | 23 | public PdfRectangle BoundingBox { get; } |
@@ -53,11 +54,14 @@ public class InlineImage : IPdfImage |
53 | 54 | public bool Interpolate { get; } |
54 | 55 |
|
55 | 56 | /// <inheritdoc /> |
56 | | - public Memory<byte> RawMemory { get; } |
| 57 | + public Memory<byte> RawMemory => rawMemory; |
57 | 58 |
|
58 | 59 | /// <inheritdoc /> |
59 | 60 | public Span<byte> RawBytes => RawMemory.Span; |
60 | 61 |
|
| 62 | + /// <inheritdoc /> |
| 63 | + public bool HasLoadedBytes => !rawMemory.IsEmpty; |
| 64 | + |
61 | 65 | /// <inheritdoc /> |
62 | 66 | public ColorSpaceDetails ColorSpaceDetails { get; } |
63 | 67 |
|
@@ -92,32 +96,35 @@ internal InlineImage(PdfRectangle bounds, |
92 | 96 | RenderingIntent = renderingIntent; |
93 | 97 | Interpolate = interpolate; |
94 | 98 | ImageDictionary = streamDictionary; |
95 | | - RawMemory = rawMemory; |
| 99 | + this.rawMemory = rawMemory; |
96 | 100 | ColorSpaceDetails = colorSpaceDetails; |
97 | 101 |
|
98 | | - var filters = filterProvider.GetNamedFilters(filterNames); |
99 | | - |
100 | | - var supportsFilters = true; |
101 | | - foreach (var filter in filters) |
| 102 | + if (!rawMemory.IsEmpty) |
102 | 103 | { |
103 | | - if (!filter.IsSupported) |
104 | | - { |
105 | | - supportsFilters = false; |
106 | | - break; |
107 | | - } |
108 | | - } |
| 104 | + var filters = filterProvider.GetNamedFilters(filterNames); |
109 | 105 |
|
110 | | - memoryFactory = supportsFilters ? new Lazy<Memory<byte>>(() => |
111 | | - { |
112 | | - var b = RawMemory; |
113 | | - for (var i = 0; i < filters.Count; i++) |
| 106 | + var supportsFilters = true; |
| 107 | + foreach (var filter in filters) |
114 | 108 | { |
115 | | - var filter = filters[i]; |
116 | | - b = filter.Decode(b, streamDictionary, filterProvider, i); |
| 109 | + if (!filter.IsSupported) |
| 110 | + { |
| 111 | + supportsFilters = false; |
| 112 | + break; |
| 113 | + } |
117 | 114 | } |
118 | 115 |
|
119 | | - return b; |
120 | | - }) : null; |
| 116 | + memoryFactory = supportsFilters ? new Lazy<Memory<byte>>(() => |
| 117 | + { |
| 118 | + var b = RawMemory; |
| 119 | + for (var i = 0; i < filters.Count; i++) |
| 120 | + { |
| 121 | + var filter = filters[i]; |
| 122 | + b = filter.Decode(b, streamDictionary, filterProvider, i); |
| 123 | + } |
| 124 | + |
| 125 | + return b; |
| 126 | + }) : null; |
| 127 | + } |
121 | 128 |
|
122 | 129 | MaskImage = softMaskImage; |
123 | 130 | } |
|
0 commit comments