#include <layeroperations.hh>
|
| | OperationsCMYK8 () |
| |
| 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 |
| |
◆ OperationsCMYK8()
| OperationsCMYK8::OperationsCMYK8 |
( |
| ) |
|
◆ cache()
Cache the given tile
Reimplemented from LayerOperations.
231 const int stride = cairo_format_stride_for_width(CAIRO_FORMAT_ARGB32, tile->width);
232 boost::shared_ptr<uint8_t>
const data =
shared_malloc(
static_cast<size_t>(stride * tile->height));
235 auto* row =
reinterpret_cast<uint32_t*
>(data.get());
237 const uint8_t* cur = tile->data.get();
240 for(
int i = 0; i < tile->height * tile->width; i++)
243 auto C_i =
static_cast<uint8_t
>(255 - ((cur[i]) >> 6) * 85);
244 auto M_i =
static_cast<uint8_t
>(255 - ((cur[i] & 0x30) >> 4) * 85);
245 auto Y_i =
static_cast<uint8_t
>(255 - ((cur[i] & 0x0C) >> 2) * 85);
246 auto K_i =
static_cast<uint8_t
>(255 - ((cur[i] & 0x03)) * 85);
248 uint32_t
const R =
static_cast<uint8_t
>((C_i * K_i) / 255);
249 uint32_t
const G =
static_cast<uint8_t
>((M_i * K_i) / 255);
250 uint32_t
const B =
static_cast<uint8_t
>((Y_i * K_i) / 255);
253 row[i] = 255u << 24 | R << 16 | G << 8 |
B;
◆ create()
◆ getBpp()
| int OperationsCMYK8::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.
262 const int sourceStride = source->width;
263 const byte* sourceBase = source->data.get();
265 const int targetStride = 8 * target->width / 2;
266 byte* targetBase = target->data.get() + (target->height * top_left_y + top_left_x) * targetStride / 8;
268 for(
int y = 0; y < source->height / 8; y++)
270 for(
int x = 0; x < source->width / 8; x++)
274 const byte* base = sourceBase + 2 * 4 * x;
275 const byte* end = base + 8 * sourceStride;
281 for(
const byte* row = base; row < end; row += sourceStride)
286 sum_m += (row[
current] & 0x30) >> 4;
287 sum_y += (row[
current] & 0x0C) >> 2;
292 targetBase[4 * x + 0] =
static_cast<byte>(sum_c * 255 / 192);
293 targetBase[4 * x + 1] =
static_cast<byte>(sum_m * 255 / 192);
294 targetBase[4 * x + 2] =
static_cast<byte>(sum_y * 255 / 192);
295 targetBase[4 * x + 3] =
static_cast<byte>(sum_k * 255 / 192);
298 targetBase += targetStride;
299 sourceBase += sourceStride * 8;
The documentation for this class was generated from the following files: