本文整理汇总了C++中SkColorFilter::asComponentTable方法的典型用法代码示例。如果您正苦于以下问题:C++ SkColorFilter::asComponentTable方法的具体用法?C++ SkColorFilter::asComponentTable怎么用?C++ SkColorFilter::asComponentTable使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SkColorFilter
的用法示例。
在下文中一共展示了SkColorFilter::asComponentTable方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Create
SkColorFilterImageFilter* SkColorFilterImageFilter::Create(SkColorFilter* cf,
SkImageFilter* input, const CropRect* cropRect, uint32_t uniqueID) {
if (NULL == cf) {
return NULL;
}
SkColorFilter* inputColorFilter;
if (input && input->asColorFilter(&inputColorFilter) && inputColorFilter) {
SkAutoUnref autoUnref(inputColorFilter);
// Try to collapse two consecutive matrix filters
SkScalar colorMatrix[20], inputMatrix[20];
if (cf->asColorMatrix(colorMatrix) && inputColorFilter->asColorMatrix(inputMatrix)
&& !matrix_needs_clamping(inputMatrix)) {
SkScalar combinedMatrix[20];
mult_color_matrix(colorMatrix, inputMatrix, combinedMatrix);
SkAutoTUnref<SkColorFilter> newCF(SkColorMatrixFilter::Create(combinedMatrix));
return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0));
}
// Try to collapse two consecutive table filters
SkBitmap colorTable, inputTable;
if (cf->asComponentTable(&colorTable) && inputColorFilter->asComponentTable(&inputTable)) {
uint8_t combinedTable[4 * 256];
SkAutoLockPixels colorLock(colorTable);
SkAutoLockPixels inputLock(inputTable);
combine_color_tables(colorTable.getAddr8(0, 0), inputTable.getAddr8(0, 0),
combinedTable);
SkAutoTUnref<SkColorFilter> newCF(SkTableColorFilter::CreateARGB(
&combinedTable[256 * 0],
&combinedTable[256 * 1],
&combinedTable[256 * 2],
&combinedTable[256 * 3])
);
return SkNEW_ARGS(SkColorFilterImageFilter, (newCF, input->getInput(0), cropRect, 0));
}
}
return SkNEW_ARGS(SkColorFilterImageFilter, (cf, input, cropRect, uniqueID));
}