#include <layeroperations.hh>
|
| | OperationsCMYK16 () |
| |
| int | getBpp () override |
| |
| Scroom::Utils::Stuff | cache (const ConstTile::Ptr &tile) override |
| |
| void | reduce (Tile::Ptr target, ConstTile::Ptr source, int x, int y) override |
| |
| | PipetteCommonOperationsCMYK (int bps_) |
| |
| PipetteLayerOperations::PipetteColor | sumPixelValues (Scroom::Utils::Rectangle< int > area, const ConstTile::Ptr &tile) override |
| |
| | Base ()=default |
| |
| | Base (const Base &)=delete |
| |
| | Base (Base &&)=delete |
| |
| Base & | operator= (const Base &)=delete |
| |
| Base & | operator= (Base &&)=delete |
| |
| virtual | ~Base ()=default |
| |
| template<typename R > |
| boost::shared_ptr< R > | shared_from_this () |
| |
| template<typename R > |
| boost::shared_ptr< R const > | shared_from_this () const |
| |
| void | initializeCairo (cairo_t *cr) override |
| |
| void | drawState (cairo_t *cr, TileState s, Scroom::Utils::Rectangle< double > viewArea) override |
| |
| Scroom::Utils::Stuff | cacheZoom (const ConstTile::Ptr &tile, int zoom, Scroom::Utils::Stuff &cache) override |
| |
| void | draw (cairo_t *cr, const ConstTile::Ptr &tile, Scroom::Utils::Rectangle< double > tileArea, Scroom::Utils::Rectangle< double > viewArea, int zoom, Scroom::Utils::Stuff cache) override |
| |
◆ OperationsCMYK16()
| OperationsCMYK16::OperationsCMYK16 |
( |
| ) |
|
◆ cache()
Cache the given tile
Reimplemented from LayerOperations.
138 const int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, tile->width);
139 boost::shared_ptr<uint8_t>
const data =
shared_malloc(
static_cast<size_t>(stride * tile->height));
142 auto* row =
reinterpret_cast<uint32_t*
>(data.get());
144 const uint8_t* cur = tile->data.get();
146 for(
int i = 0; i < 2 * tile->height * tile->width; i += 2)
149 auto C_i =
static_cast<uint8_t
>(255 - ((cur[i]) >> 4) * 17);
150 auto M_i =
static_cast<uint8_t
>(255 - ((cur[i] & 0x0F)) * 17);
151 auto Y_i =
static_cast<uint8_t
>(255 - ((cur[i + 1]) >> 4) * 17);
152 auto K_i =
static_cast<uint8_t
>(255 - ((cur[i + 1] & 0x0F)) * 17);
154 uint32_t
const R =
static_cast<uint8_t
>((C_i * K_i) / 255);
155 uint32_t
const G =
static_cast<uint8_t
>((M_i * K_i) / 255);
156 uint32_t
const B =
static_cast<uint8_t
>((Y_i * K_i) / 255);
159 row[i / 2] = 255u << 24 | R << 16 | G << 8 |
B;
◆ create()
◆ getBpp()
| int OperationsCMYK16::getBpp |
( |
| ) |
|
|
overridevirtual |
Return the number of bits per pixel that the layer will use.
This number will be used to compute the amount of memory required to store one tile
Implements LayerOperations.
◆ reduce()
Reduce the source tile by a factor of 8
The target tile will contain data for 8*8 source tiles. Offsets x and y indicate which of those 64 source tiles is currently being processed
- Parameters
-
| target | Tile that will contain the reduced bitmap |
| source | Tile that is to be reduced |
| x | x-offset (0..7) of the source tile in the target tile |
| y | y-offset (0..7) of the source tile in the target tile |
- Note
- The
target tile belongs to a different layer, and hence possibly has a different bpp than the current one, depending on the LayerSpec given to createTiledBitmap()
Implements LayerOperations.
168 const int sourceStride = 4 * source->width / 2;
169 const byte* sourceBase = source->data.get();
171 const int targetStride = 8 * target->width / 2;
172 byte* targetBase = target->data.get() + (target->height * top_left_y + top_left_x) * targetStride / 8;
174 for(
int y = 0; y < source->height / 8; y++)
176 byte* targetPtr = targetBase;
178 for(
int x = 0; x < source->width / 8; x++)
182 const byte* base = sourceBase + 4 * 4 * x;
183 const byte* end = base + 8 * sourceStride;
189 for(
const byte* row = base; row < end; row += sourceStride)
195 sum_y += row[
current + 1] >> 4;
196 sum_k += row[
current + 1] & 15;
200 targetPtr[0] =
static_cast<byte>(sum_c * 255 / (15 * 64));
201 targetPtr[1] =
static_cast<byte>(sum_m * 255 / (15 * 64));
202 targetPtr[2] =
static_cast<byte>(sum_y * 255 / (15 * 64));
203 targetPtr[3] =
static_cast<byte>(sum_k * 255 / (15 * 64));
208 targetBase += targetStride;
209 sourceBase += sourceStride * 8;
The documentation for this class was generated from the following files: