implemented GraphicsMagick compatibility

This commit is contained in:
Manuel Reimer
2013-12-22 10:39:46 +01:00
committed by louis
parent 5bf7c3a84e
commit 3952cad3d4
4 changed files with 42 additions and 13 deletions

View File

@@ -101,14 +101,7 @@ bool cImageLoader::LoadOsdElement(cString name, int width, int height) {
bool cImageLoader::DrawBackground(tColor back, tColor blend, int width, int height) {
if ((width < 1) || (height < 1) || (width > 1920) || (height > 1080))
return false;
Color Back = Argb2Color(back);
Color Blend = Argb2Color(blend);
Image tmp(Geometry(width, height), Blend);
double arguments[9] = {0.0,(double)height,0.0,-1*(double)width,0.0,0.0,1.5*(double)width,0.0,1.0};
tmp.sparseColor(MatteChannel, BarycentricColorInterpolate, 9, arguments);
Image tmp2(Geometry(width, height), Back);
tmp.composite(tmp2, 0, 0, OverlayCompositeOp);
buffer = tmp;
CreateGradient(back, blend, width, height, 0.8, 0.8);
return true;
}
@@ -130,3 +123,28 @@ cImage cImageLoader::GetImage() {
}
return image;
}
void cImageLoader::CreateGradient(tColor back, tColor blend, int width, int height, double wfactor, double hfactor) {
Color Back = Argb2Color(back);
Color Blend = Argb2Color(blend);
int maxw = MaxRGB * wfactor;
int maxh = MaxRGB * hfactor;
Image imgblend(Geometry(width, height), Blend);
imgblend.modifyImage();
imgblend.type(TrueColorMatteType);
PixelPacket *pixels = imgblend.getPixels(0, 0, width, height);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
PixelPacket *pixel = pixels + y * width + x;
int opacity = (maxw / width * x + maxh - maxh / height * y) / 2;
pixel->opacity = (opacity <= MaxRGB) ? opacity : MaxRGB;
}
}
imgblend.syncPixels();
Image imgback(Geometry(width, height), Back);
imgback.composite(imgblend, 0, 0, OverCompositeOp);
buffer = imgback;
}