зеркало из https://github.com/mozilla/moz-skia.git
Add transparent source bitmap to colormatrix GM.
R=robertphillips@google.com Review URL: https://codereview.appspot.com/6727043 git-svn-id: http://skia.googlecode.com/svn/trunk@5969 2bbb7eff-a529-9590-31e7-b0007b416f81
This commit is contained in:
Родитель
3fe1690834
Коммит
1282009256
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "gm.h"
|
||||
#include "SkColorMatrixFilter.h"
|
||||
#include "SkGradientShader.h"
|
||||
|
||||
#define WIDTH 500
|
||||
#define HEIGHT 500
|
||||
|
@ -41,7 +42,8 @@ class ColorMatrixGM : public GM {
|
|||
SkOnce fOnce;
|
||||
void init() {
|
||||
if (fOnce.once()) {
|
||||
fBitmap = createBitmap(64, 64);
|
||||
fSolidBitmap = this->createSolidBitmap(64, 64);
|
||||
fTransparentBitmap = this->createTransparentBitmap(64, 64);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +61,7 @@ protected:
|
|||
return make_isize(WIDTH, HEIGHT);
|
||||
}
|
||||
|
||||
SkBitmap createBitmap(int width, int height) {
|
||||
SkBitmap createSolidBitmap(int width, int height) {
|
||||
SkBitmap bm;
|
||||
bm.setConfig(SkBitmap::kARGB_8888_Config, width, height);
|
||||
bm.allocPixels();
|
||||
|
@ -75,68 +77,95 @@ protected:
|
|||
}
|
||||
return bm;
|
||||
}
|
||||
|
||||
// creates a bitmap with shades of transparent gray.
|
||||
SkBitmap createTransparentBitmap(int width, int height) {
|
||||
SkBitmap bm;
|
||||
bm.setConfig(SkBitmap::kARGB_8888_Config, width, height);
|
||||
bm.allocPixels();
|
||||
SkCanvas canvas(bm);
|
||||
canvas.clear(0x0);
|
||||
|
||||
SkPoint pts[] = {{0, 0}, {SkIntToScalar(width), SkIntToScalar(height)}};
|
||||
SkColor colors[] = {0x00000000, 0xFFFFFFFF};
|
||||
SkPaint paint;
|
||||
paint.setShader(SkGradientShader::CreateLinear(pts, colors, NULL, 2,
|
||||
SkShader::kClamp_TileMode))->unref();
|
||||
canvas.drawRect(SkRect::MakeWH(SkIntToScalar(width), SkIntToScalar(height)), paint);
|
||||
return bm;
|
||||
}
|
||||
|
||||
virtual void onDraw(SkCanvas* canvas) {
|
||||
this->init();
|
||||
|
||||
SkPaint paint;
|
||||
SkColorMatrix matrix;
|
||||
|
||||
matrix.setIdentity();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 0, 0, &paint);
|
||||
paint.setXfermodeMode(SkXfermode::kSrc_Mode);
|
||||
const SkBitmap bmps[] = { fSolidBitmap, fTransparentBitmap };
|
||||
|
||||
matrix.setRotate(SkColorMatrix::kR_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 80, 0, &paint);
|
||||
for (size_t i = 0; i < SK_ARRAY_COUNT(bmps); ++i) {
|
||||
|
||||
matrix.setRotate(SkColorMatrix::kG_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 160, 0, &paint);
|
||||
matrix.setIdentity();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 0, 0, &paint);
|
||||
|
||||
matrix.setRotate(SkColorMatrix::kB_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 240, 0, &paint);
|
||||
matrix.setRotate(SkColorMatrix::kR_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 80, 0, &paint);
|
||||
|
||||
matrix.setSaturation(SkFloatToScalar(0.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 0, 80, &paint);
|
||||
matrix.setRotate(SkColorMatrix::kG_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 160, 0, &paint);
|
||||
|
||||
matrix.setSaturation(SkFloatToScalar(0.5f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 80, 80, &paint);
|
||||
matrix.setRotate(SkColorMatrix::kB_Axis, 90);
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 240, 0, &paint);
|
||||
|
||||
matrix.setSaturation(SkFloatToScalar(1.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 160, 80, &paint);
|
||||
matrix.setSaturation(SkFloatToScalar(0.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 0, 80, &paint);
|
||||
|
||||
matrix.setSaturation(SkFloatToScalar(2.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 240, 80, &paint);
|
||||
matrix.setSaturation(SkFloatToScalar(0.5f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 80, 80, &paint);
|
||||
|
||||
matrix.setRGB2YUV();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 0, 160, &paint);
|
||||
matrix.setSaturation(SkFloatToScalar(1.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 160, 80, &paint);
|
||||
|
||||
matrix.setYUV2RGB();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(fBitmap, 80, 160, &paint);
|
||||
matrix.setSaturation(SkFloatToScalar(2.0f));
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 240, 80, &paint);
|
||||
|
||||
SkScalar s1 = SK_Scalar1;
|
||||
SkScalar s255 = SkIntToScalar(255);
|
||||
// Move red into alpha, set color to white
|
||||
SkScalar data[20] = {
|
||||
0, 0, 0, 0, s255,
|
||||
0, 0, 0, 0, s255,
|
||||
0, 0, 0, 0, s255,
|
||||
s1, 0, 0, 0, 0,
|
||||
};
|
||||
matrix.setRGB2YUV();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 0, 160, &paint);
|
||||
|
||||
setArray(&paint, data);
|
||||
canvas->drawBitmap(fBitmap, 160, 160, &paint);
|
||||
matrix.setYUV2RGB();
|
||||
setColorMatrix(&paint, matrix);
|
||||
canvas->drawBitmap(bmps[i], 80, 160, &paint);
|
||||
|
||||
SkScalar s1 = SK_Scalar1;
|
||||
SkScalar s255 = SkIntToScalar(255);
|
||||
// Move red into alpha, set color to white
|
||||
SkScalar data[20] = {
|
||||
0, 0, 0, 0, s255,
|
||||
0, 0, 0, 0, s255,
|
||||
0, 0, 0, 0, s255,
|
||||
s1, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
setArray(&paint, data);
|
||||
canvas->drawBitmap(bmps[i], 160, 160, &paint);
|
||||
|
||||
canvas->translate(0, 240);
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
SkBitmap fBitmap;
|
||||
SkBitmap fSolidBitmap;
|
||||
SkBitmap fTransparentBitmap;
|
||||
typedef GM INHERITED;
|
||||
};
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче