61# include FT_FREETYPE_H
88#include "RConfigure.h"
96# include "Windows4root.h"
100# define X_DISPLAY_MISSING 1
102# include <afterbase.h>
104# include <win32/config.h>
105# include <win32/afterbase.h>
106# define X_DISPLAY_MISSING 1
108# include <afterimage.h>
133#if defined(__GNUC__) && __GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)) && !__INTEL_COMPILER
134#pragma GCC diagnostic ignored "-Wstrict-aliasing"
155#define _alphaBlend(bot, top) {\
156 __argb32__ *T = (__argb32__*)(top);\
157 __argb32__ *B = (__argb32__*)(bot);\
162 B->a = ((B->a*aa)>>8) + T->a;\
163 B->r = (B->r*aa + T->r*T->a)>>8;\
164 B->g = (B->g*aa + T->g*T->a)>>8;\
165 B->b = (B->b*aa + T->b*T->a)>>8;\
232 fImage = create_asimage(w ? w : 20,
h ?
h : 20, 0);
299 if (img.
fImage->alt.vector) {
302 memcpy(
fImage->alt.vector, img.
fImage->alt.vector, size);
320 if (
this != &img && img.
IsValid()) {
329 if (img.
fImage->alt.vector) {
332 memcpy(
fImage->alt.vector, img.
fImage->alt.vector, size);
379 const char *delim =
":";
381 const char *delim =
";";
383 while (icon_path.
Tokenize(token, from, delim) &&
cnt < 6) {
399 FILE *fp = fopen(
file,
"rb");
400 const char *ret =
"";
404 if (!fread(&magic, 1, 1, fp)) {
412 if (!fread(&magic, 1, 1, fp)) {
416 if (!fread(&magic, 1, 1, fp)) {
421 ret = (magic == 1) ?
"ico" :
"cur";
426 if (!fread(&magic, 1, 1, fp)) {
431 if (magic == 0x21) ret =
"ps";
432 else if (magic == 0x50) ret =
"pdf";
482 Warning(
"Scale",
"Visual not initiated");
486 Bool_t xpm = filename && (filename[0] ==
'/' &&
487 filename[1] ==
'*') && filename[2] ==
' ';
499 set_output_threshold(0);
501 static ASImageImportParams iparams;
505 iparams.filter = SCL_DO_ALL;
506 iparams.gamma = SCREEN_GAMMA;
507 iparams.gamma_table = NULL;
509 iparams.format = ASA_ASImage;
511 iparams.subimage = 0;
512 iparams.return_animation_delay = -1;
516 if (filename) dot = strrchr(filename,
'.');
529 iparams.subimage = ext.
Atoi();
531 ext = strrchr(fname.
Data(),
'.') + 1;
534 image = file2ASImage_extra(fname.
Data(), &iparams);
546 unsigned char *bitmap = 0;
552 if (!handler || ((handler->
LoadPlugin() == -1))) {
571 image = bitmap2asimage(bitmap, w,
h, 0, 0);
651 Error(
"WriteImage",
"no image loaded");
656 Error(
"WriteImage",
"no file name specified");
661 if ((
s = strrchr(
file,
'.'))) {
665 Error(
"WriteImage",
"cannot determine a valid file type");
673 Error(
"WriteImage",
"not a valid file type was specified");
679 ASImageFileTypes atype = (ASImageFileTypes)mytype;
687 static ASImageExportParams parms;
692 parms.xpm.type = atype;
693 parms.xpm.flags = EXPORT_ALPHA;
694 parms.xpm.dither = 4;
695 parms.xpm.opaque_threshold = 127;
696 parms.xpm.max_colors = 512;
699 ASImage2bmp(im, fname.
Data(), 0);
702 ASImage2xcf(im, fname.
Data(), 0);
705 parms.png.type = atype;
706 parms.png.flags = EXPORT_ALPHA;
710 parms.jpeg.type = atype;
711 parms.jpeg.flags = 0;
712 parms.jpeg.quality = aquality;
715 parms.gif.type = atype;
716 parms.gif.flags = EXPORT_ALPHA;
717 parms.gif.dither = 0;
718 parms.gif.opaque_threshold = 0;
722 parms.gif.type = atype;
723 parms.gif.flags = EXPORT_ALPHA | EXPORT_APPEND;
724 parms.gif.dither = 0;
725 parms.gif.opaque_threshold = 0;
726 parms.gif.animate_repeats = 0;
739 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
740 parms.gif.animate_repeats = 0;
741 }
else if(sufix==
"") {
758 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
759 parms.gif.animate_repeats = atoi(
s);
768 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
769 parms.gif.animate_repeats = 0;
770 }
else if(sLength>3 && sufix.
CountChar(
'+')==2 &&
TString(sufix(1,sLength-2)).Contains(
"++")) {
776 delay = atoi(sDelay);
777 parms.gif.flags |= EXPORT_ANIMATION_REPEATS;
778 parms.gif.animate_repeats = atoi(sRepeats);
780 Error(
"WriteImage",
"gif suffix %s not yet supported",
s);
784 parms.gif.animate_delay = delay;
786 int i1 = fname.
Index(
"gif+");
788 fname = fname(0, i1 + 3);
791 Error(
"WriteImage",
"unexpected gif extension structure %s", fname.
Data());
797 parms.tiff.type = atype;
798 parms.tiff.flags = EXPORT_ALPHA;
799 parms.tiff.rows_per_strip = 0;
800 parms.tiff.compression_type = aquality <= 50 ? TIFF_COMPRESSION_JPEG :
801 TIFF_COMPRESSION_NONE;
802 parms.tiff.jpeg_quality = 100;
803 parms.tiff.opaque_threshold = 0;
806 Error(
"WriteImage",
"file type %s not yet supported",
s);
810 if (!ASImage2file(im, 0, fname.
Data(), atype, &parms)) {
811 Error(
"WriteImage",
"error writing file %s",
file);
829 if (
s ==
"jpg" ||
s ==
"jpeg")
845 if (
s.Contains(
"gif+"))
868 astype = ASIT_Xpm;
break;
870 astype = ASIT_ZCompressedXpm;
break;
872 astype = ASIT_GZCompressedXpm;
break;
874 astype = ASIT_Png;
break;
876 astype = ASIT_Jpeg;
break;
878 astype = ASIT_Xcf;
break;
880 astype = ASIT_Ppm;
break;
882 astype = ASIT_Pnm;
break;
884 astype = ASIT_Bmp;
break;
886 astype = ASIT_Ico;
break;
888 astype = ASIT_Cur;
break;
890 astype = ASIT_Gif;
break;
892 astype = ASIT_Gif;
break;
894 astype = ASIT_Tiff;
break;
896 astype = ASIT_Xbm;
break;
898 astype = ASIT_Targa;
break;
900 astype = ASIT_XMLScript;
break;
902 astype = ASIT_Unknown;
908 case ASIT_ZCompressedXpm:
910 case ASIT_GZCompressedXpm:
953 asquality = 25;
break;
955 asquality = 75;
break;
957 asquality = 50;
break;
959 asquality = 100;
break;
965 if (asquality > 0 && asquality <= 25)
967 if (asquality > 26 && asquality <= 50)
969 if (asquality > 51 && asquality <= 75)
971 if (asquality > 76 && asquality <= 100)
991 Warning(
"SetImage",
"Visual not initiated");
1009 ASVectorPalette asPalette;
1013 for (col = 0; col < 4; col++)
1014 asPalette.channels[col] =
new UShort_t[asPalette.npoints];
1021 asPalette.points =
new Double_t[asPalette.npoints];
1022 for (
Int_t point = 0; point <
Int_t(asPalette.npoints); point++)
1026 height, &asPalette, ASA_ASImage,
1029 delete [] asPalette.points;
1030 for (col = 0; col < 4; col++)
1031 delete [] asPalette.channels[col];
1075 Error(
"FromPad",
"pad cannot be 0");
1080 Warning(
"FromPad",
"Visual not initiated");
1090 if (
gROOT->IsBatch()) {
1098 if (itmp && itmp->
fImage) {
1107 if (itmp && itmp->
fImage && (itmp !=
this)) {
1109 if (itmp->
fImage->alt.argb32) {
1111 fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
1112 memcpy(
fImage->alt.argb32, itmp->
fImage->alt.argb32, sz*4);
1139 static int x11 = -1;
1140 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
1145 unsigned char *bits =
gVirtualX->GetColorBits(wd, 0, 0, w,
h);
1150 fImage = bitmap2asimage(bits, w,
h, 0, 0);
1171 Error(
"Draw",
"no image set");
1184 w =
Int_t(w*cx) + 4;
1189 rname =
"new TCanvas(\"" + rname +
Form(
"\", %d, %d);", w,
h);
1199 gPad->Range(-left / (1.0 - left - right),
1200 -bottom / (1.0 - top - bottom),
1201 1 + right / (1.0 - left - right),
1202 1 + top / ( 1.0 - top - bottom));
1203 gPad->RangeAxis(0, 0, 1, 1);
1226 wsrc = wsrc ? wsrc : im->width;
1227 hsrc = hsrc ? hsrc : im->height;
1229 static int x11 = -1;
1230 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
1237 UInt_t ww = wsrc - ow + (ow ? 8 : 0);
1244 char *bits =
new char[ww*hh];
1246 ASImageDecoder *imdec = start_image_decoding(
fgVisual, im, SCL_DO_ALPHA,
1247 xsrc, ysrc, ww, 0, 0);
1249 for (yy = 0; yy < hh; yy++) {
1250 imdec->decode_image_scanline(imdec);
1251 CARD32 *
a = imdec->buffer.alpha;
1253 for (xx = 0; xx < ww; xx++) {
1268 stop_image_decoding(&imdec);
1271 (
const char *)bits, ww, hh);
1289 if (x11 && (!
gPad ||
gPad->GetGLDevice() == -1)) {
1290 asimage2drawable(
fgVisual, wid, im, (GC)gc, xsrc, ysrc,
x,
y, wsrc, hsrc, 1);
1293 unsigned char *bits = (
unsigned char *)im->alt.argb32;
1295 img = tile_asimage(
fgVisual, im, xsrc, ysrc, wsrc, hsrc,
1296 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
1298 bits = (
unsigned char *)img->alt.argb32;
1305 if (
gPad &&
gPad->GetGLDevice() != -1) {
1307 painter->DrawPixels(bits, wsrc, hsrc,
x,
y, !option.
Contains(
"opaque"));
1315 gVirtualX->CopyArea(pic, wid, gc, 0, 0, wsrc, hsrc,
x,
y);
1322 destroy_asimage(&img);
1346 xsrc, ysrc, wsrc, hsrc, opt);
1365 Error(
"Paint",
"no image set");
1370 Warning(
"Paint",
"Visual not initiated");
1374 Int_t tile_x = 0, tile_y = 0;
1375 CARD32 tile_tint = 0;
1384 if (sscanf(opt.
Data() + opt.
Index(
"t"),
"t%d,%d,%s", &tile_x, &tile_y,
1387 if (parse_argb_color(stint, (CARD32*)&tile_tint) == stint)
1390 Error(
"Paint",
"tile option error");
1398 if (!
fImage->alt.vector) {
1411 to_h = (
Int_t)(to_h * (1.0 -
gPad->GetBottomMargin() -
gPad->GetTopMargin() ) + 0.5);
1412 to_w = (
Int_t)(to_w * (1.0 -
gPad->GetLeftMargin() -
gPad->GetRightMargin() ) + 0.5);
1415 if ((to_w < 25 || to_h < 25) && !expand) {
1416 Error(
"Paint",
"pad too small to display an image");
1428 Int_t pal_Ax = to_w +
gPad->UtoAbsPixel(
gPad->GetLeftMargin()) +
1429 (
gPad->UtoAbsPixel(
gPad->GetRightMargin()) / 10);
1431 Int_t pal_x = to_w +
gPad->UtoPixel(
gPad->GetLeftMargin()) +
1432 (
gPad->UtoPixel(
gPad->GetRightMargin()) / 10);
1437 ASImage *grad_im = 0;
1445 grad.type = GRADIENT_Top2Bottom;
1446 grad.color =
new ARGB32[grad.npoints];
1447 grad.offset =
new double[grad.npoints];
1450 Int_t oldPt = grad.npoints -
pt -1;
1451 grad.offset[
pt] = 1 - pal.
fPoints[oldPt];
1452 grad.color[
pt] = (((ARGB32)(pal.
fColorBlue[oldPt] & 0xff00)) >> 8) |
1454 (((ARGB32)(pal.
fColorRed[oldPt] & 0xff00)) << 8) |
1455 (((ARGB32)(pal.
fColorAlpha[oldPt] & 0xff00)) << 16);
1459 pal_h, SCL_DO_COLOR,
1462 delete [] grad.color;
1463 delete [] grad.offset;
1471 to_w, to_h, tile_tint, ASA_ASImage,
1498 ASImage *tmpImage = 0;
1509 destroy_asimage(&tmpImage);
1524 Error(
"Paint",
"image could not be rendered to display");
1528 int tox = expand ? 0 :
int(
gPad->UtoPixel(1.) *
gPad->GetLeftMargin());
1529 int toy = expand ? 0 :
int(
gPad->VtoPixel(0.) *
gPad->GetTopMargin());
1531 if (!
gROOT->IsBatch()) {
1546 axis.
PaintAxis(pal_Xpos,
gPad->PixeltoY(pal_Ay + pal_h - 1),
1547 pal_Xpos,
gPad->PixeltoY(pal_Ay),
1548 min, max, ndiv,
"+LU");
1553 pal_Xpos,
gPad->AbsPixeltoY(pal_Ay + 1),
1554 min, max, ndiv,
"+L");
1564 gPad->XtoAbsPixel(0),
gPad->YtoAbsPixel(1));
1569 dump->
Merge(&tgrad,
"alphablend", pal_Ax, pal_Ay);
1579 pal_Xpos,
gPad->AbsPixeltoY(pal_Ay + 1),
1580 min, max, ndiv,
"+L");
1584 Warning(
"Paint",
"PDF not implemented yet");
1587 Warning(
"Paint",
"SVG not implemented yet");
1595 if ((color = (
TColor*)
colors->FindObject(
"Image_PS")) == 0)
1596 color =
new TColor(
colors->GetEntries(), 1., 1., 1.,
"Image_PS");
1607 x2 =
x1+dx/image->width;
1609 y2 = y1+dy/image->height;
1612 x2 =
x1+(dx*(1-
gPad->GetRightMargin()-
gPad->GetLeftMargin()))/image->width;
1613 y1 =
gPad->GetY2()-dy*
gPad->GetTopMargin();
1614 y2 = y1+(dy*(1-
gPad->GetTopMargin()-
gPad->GetBottomMargin()))/image->height;
1619 ASImageDecoder *imdec = start_image_decoding(
fgVisual, image, SCL_DO_ALL,
1620 0, 0, image->width, image->height, 0);
1622 for (
Int_t yt = 0; yt < (
Int_t)image->height; yt++) {
1623 imdec->decode_image_scanline(imdec);
1624 for (
Int_t xt = 0; xt < (
Int_t)image->width; xt++)
1626 imdec->buffer.green[xt],
1627 imdec->buffer.blue[xt]);
1629 stop_image_decoding(&imdec);
1634 Double_t xconv = (
gPad->AbsPixeltoX(pal_Ax + pal_w) -
gPad->AbsPixeltoX(pal_Ax)) / grad_im->width;
1635 Double_t yconv = (
gPad->AbsPixeltoY(pal_Ay - pal_h) -
gPad->AbsPixeltoY(pal_Ay)) / grad_im->height;
1636 x1 =
gPad->AbsPixeltoX(pal_Ax);
1638 y2 =
gPad->AbsPixeltoY(pal_Ay);
1643 imdec = start_image_decoding(
fgVisual, grad_im, SCL_DO_ALL,
1644 0, 0, grad_im->width, grad_im->height, 0);
1646 for (
Int_t yt = 0; yt < (
Int_t)grad_im->height; yt++) {
1647 imdec->decode_image_scanline(imdec);
1648 for (
Int_t xt = 0; xt < (
Int_t)grad_im->width; xt++)
1650 imdec->buffer.green[xt],
1651 imdec->buffer.blue[xt]);
1654 stop_image_decoding(&imdec);
1665 pal_Xpos,
gPad->AbsPixeltoY(pal_Ay + 1),
1666 min, max, ndiv,
"+L");
1672 destroy_asimage(&grad_im);
1681 Int_t pxl, pyl, pxt, pyt;
1688 if (px1 < px2) {pxl = px1; pxt = px2;}
1689 else {pxl = px2; pxt = px1;}
1690 if (py1 < py2) {pyl = py1; pyt = py2;}
1691 else {pyl = py2; pyt = py1;}
1693 if ((px > pxl && px < pxt) && (py > pyl && py < pyt))
1704 static TBox *ZoomBox;
1709 gPad->ExecuteEvent(event, px, py);
1715 static Int_t px1old, py1old, px2old, py2old;
1716 static Int_t px1, py1, px2, py2, pxl, pyl, pxt, pyt;
1727 if (imgX < 0) px = px - imgX;
1728 if (imgY < 0) py = py - imgY;
1733 if (imgX >= (
int)image->width) px = px - imgX + image->width - 1;
1734 if (imgY >= (
int)image->height) py = py - imgY + image->height - 1;
1739 px1 =
gPad->XtoAbsPixel(
gPad->GetX1());
1740 py1 =
gPad->YtoAbsPixel(
gPad->GetY1());
1741 px2 =
gPad->XtoAbsPixel(
gPad->GetX2());
1742 py2 =
gPad->YtoAbsPixel(
gPad->GetY2());
1743 px1old = px; py1old = py;
1765 ZoomBox =
new TBox(pxl, pyl, pxt, pyt);
1767 ZoomBox->
Draw(
"l*");
1786 Int_t imgX1 = px1old -
gPad->XtoAbsPixel(0);
1787 Int_t imgY1 = py1old -
gPad->YtoAbsPixel(1);
1788 Int_t imgX2 = px -
gPad->XtoAbsPixel(0);
1789 Int_t imgY2 = py -
gPad->YtoAbsPixel(1);
1791 imgY1 = image->height - 1 - imgY1;
1792 imgY2 = image->height - 1 - imgY2;
1798 Zoom((imgX1 < imgX2) ? imgX1 : imgX2, (imgY1 < imgY2) ? imgY1 : imgY2,
1817 static char info[64];
1823 px -=
gPad->XtoAbsPixel(0);
1824 py -=
gPad->YtoAbsPixel(1);
1827 if (px < 0 || py < 0)
return info;
1831 if (px >= (
int)image->width || py >= (
int)image->height)
1834 py = image->height - 1 - py;
1841 if (
fImage->alt.vector) {
1842 snprintf(info,64,
"x: %d y: %d %.5g",
1845 snprintf(info,64,
"x: %d y: %d", px, py);
1861 Warning(
"SetPalette",
"Visual not initiated");
1866 Warning(
"SetPalette",
"Image not valid");
1870 if (
fImage->alt.vector == 0)
1876 ASVectorPalette asPalette;
1878 asPalette.channels[0] =
new CARD16 [asPalette.npoints];
1879 asPalette.channels[1] =
new CARD16 [asPalette.npoints];
1880 asPalette.channels[2] =
new CARD16 [asPalette.npoints];
1881 asPalette.channels[3] =
new CARD16 [asPalette.npoints];
1887 asPalette.points =
new double[asPalette.npoints];
1888 for (
Int_t point = 0; point <
Int_t(asPalette.npoints); point++)
1894 delete [] asPalette.points;
1895 for (
Int_t col = 0; col < 4; col++)
1896 delete [] asPalette.channels[col];
1915 Warning(
"Scale",
"Image not initiated");
1920 Warning(
"Scale",
"Visual not initiated");
1928 if (toWidth > 30000)
1930 if (toHeight > 30000)
1933 ASImage *img = scale_asimage(
fgVisual,
fImage, toWidth, toHeight,
1950 Warning(
"Scale",
"Image not initiated");
1955 Warning(
"Scale",
"Visual not initiated");
1963 if (toWidth > 30000)
1965 if (toHeight > 30000)
1969 yStart, yEnd, toWidth, toHeight,
1985 Warning(
"Tile",
"Image not initiated");
1990 Warning(
"Tile",
"Visual not initiated");
1998 if (toWidth > 30000)
2000 if (toHeight > 30000)
2003 ASImage *img = tile_asimage(
fgVisual,
fImage, 0, 0, toWidth, toHeight, 0,
2025 Warning(
"Zoom",
"Image not valid");
2047 Warning(
"UnZoom",
"Image not valid");
2075 Warning(
"Flip",
"Image not valid");
2079 Warning(
"Flip",
"Visual not initiated");
2083 if (
fImage->alt.vector) {
2084 Warning(
"Flip",
"flip does not work for data images");
2122 Warning(
"Mirror",
"Image not valid");
2127 Warning(
"Mirror",
"Visual not initiated");
2131 if (
fImage->alt.vector) {
2132 Warning(
"Mirror",
"mirror does not work for data images");
2204 if (inbatch && !noX) {
2216 fgVisual = create_asvisual(0, 0, 0, 0);
2223 fgVisual = create_asvisual(0, 0, 0, 0);
2226 disp = (Display*)
gVirtualX->GetDisplay();
2229 Visual *vis = (Visual*)
gVirtualX->GetVisual();
2232 if (vis == 0 || cmap == 0) {
2233 fgVisual = create_asvisual(0, 0, 0, 0);
2235 fgVisual = create_asvisual_for_id(disp, screen, depth,
2236 XVisualIDFromVisual(vis), cmap, 0);
2240 fgVisual = create_asvisual(0, 0, 0, 0);
2253 Warning(
"StartPaletteEditor",
"Image not valid");
2256 if (
fImage->alt.vector == 0) {
2257 Warning(
"StartPaletteEditor",
"palette can be modified only for data images");
2272 Warning(
"GetPixmap",
"Visual not initiated");
2280 static int x11 = -1;
2281 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2287 if (!
fImage->alt.argb32) {
2290 ret =
gVirtualX->CreatePixmapFromData((
unsigned char*)
fImage->alt.argb32,
2306 Warning(
"GetMask",
"Visual not initiated");
2313 Warning(
"GetMask",
"No image");
2318 UInt_t ow = img->width%8;
2319 UInt_t ww = img->width - ow + (ow ? 8 : 0);
2326 char *bits =
new char[ww*hh];
2328 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALPHA,
2335 for (
y = 0;
y < hh;
y++) {
2336 imdec->decode_image_scanline(imdec);
2337 CARD32 *
a = imdec->buffer.alpha;
2339 for (
x = 0;
x < ww;
x++) {
2353 stop_image_decoding(&imdec);
2354 pxmap =
gVirtualX->CreateBitmap(
gVirtualX->GetDefaultRootWindow(), (
const char *)bits,
2366 Warning(
"SetImage",
"Visual not initiated");
2380 static int x11 = -1;
2381 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2386 unsigned char *bits =
gVirtualX->GetColorBits(pxm, 0, 0, w,
h);
2393 fImage = bitmap2asimage(bits, w,
h, 0, 0);
2397 unsigned char *mask_bits =
gVirtualX->GetColorBits(mask, 0, 0, w,
h);
2398 fImage = bitmap2asimage(bits, w,
h, 0, mask_bits);
2399 delete [] mask_bits;
2410 Warning(
"GetPixels",
"Wrong Image");
2415 ASImageDecoder *imdec;
2418 height = !height ? img->height : height;
2429 if ((
x >= (
int)img->width) || (
y >= (
int)img->height)) {
2433 if ((
int)(
x +
width) > (
int)img->width) {
2437 if ((
int)(
y + height) > (
int)img->height) {
2438 height = img->height -
y;
2441 if ((imdec = start_image_decoding(0,
fImage, SCL_DO_ALL, 0,
y,
2442 img->width, height, 0)) == 0) {
2443 Warning(
"GetPixels",
"Failed to create image decoder");
2453 for (
UInt_t k = 0; k < height; k++) {
2454 imdec->decode_image_scanline(imdec);
2457 if ((
r == (
Int_t)imdec->buffer.red[i]) &&
2458 (
g == (
Int_t)imdec->buffer.green[i]) &&
2459 (
b == (
Int_t)imdec->buffer.blue[i])) {
2461 r = (
Int_t)imdec->buffer.red[i];
2462 g = (
Int_t)imdec->buffer.green[i];
2463 b = (
Int_t)imdec->buffer.blue[i];
2470 stop_image_decoding(&imdec);
2482 Warning(
"GetVecArray",
"Bad Image");
2485 if (
fImage->alt.vector) {
2486 return fImage->alt.vector;
2504 Warning(
"GetArray",
"Bad Image");
2510 if (
fImage->alt.vector) {
2515 ASImageDecoder *imdec;
2517 w = w ? w :
fImage->width;
2526 if ((imdec = start_image_decoding(0, img, SCL_DO_ALL, 0, 0,
2527 img->width, 0, 0)) == 0) {
2528 Warning(
"GetArray",
"Failed to create image decoder");
2539 for (
UInt_t k = 0; k <
h; k++) {
2540 imdec->decode_image_scanline(imdec);
2542 for (
UInt_t i = 0; i < w; ++i) {
2543 if ((
r == imdec->buffer.red[i]) &&
2544 (
g == imdec->buffer.green[i]) &&
2545 (
b == imdec->buffer.blue[i])) {
2547 r = imdec->buffer.red[i];
2548 g = imdec->buffer.green[i];
2549 b = imdec->buffer.blue[i];
2557 stop_image_decoding(&imdec);
2580 const char *color,
const char *font_name,
2584 ARGB32 text_color = ARGB32_Black;
2585 ASImage *fore_im = 0;
2586 ASImage *text_im = 0;
2590 Warning(
"DrawText",
"Visual not initiated");
2598 if (fn.
Last(
'/') == 0) fn = fn(1, fn.
Length() - 1);
2611 parse_argb_color(color, &text_color);
2624 Warning(
"DrawText",
"cannot create Font Manager");
2631 font = get_asfont(
gFontManager,
"fixed", 0, size, ASF_GuessWho);
2633 Warning(
"DrawText",
"cannot find a font %s", font_name);
2638 get_text_size(
text, font, (ASText3DType)
type, &
width, &height);
2645 text_im = draw_text(
text, font, (ASText3DType)
type, 0);
2650 ASImage *tmp = file2ASImage(fore_file, 0xFFFFFFFF, SCREEN_GAMMA, 0, 0);
2652 if ((tmp->width !=
width) || (tmp->height != height)) {
2653 fore_im = tile_asimage(
fgVisual, tmp, 0, 0,
width, height, 0,
2656 destroy_asimage(&tmp);
2663 move_asimage_channel(fore_im, IC_ALPHA, text_im, IC_ALPHA);
2664 destroy_asimage(&text_im);
2672 ASImage *rendered_im;
2673 ASImageLayer layers[2];
2675 init_image_layers(&(layers[0]), 2);
2676 fore_im->back_color = text_color;
2677 layers[0].im = rimg;
2678 layers[0].dst_x = 0;
2679 layers[0].dst_y = 0;
2680 layers[0].clip_width = rimg->width;
2681 layers[0].clip_height = rimg->height;
2682 layers[0].bevel = 0;
2683 layers[1].im = fore_im;
2684 layers[1].dst_x =
x;
2685 layers[1].dst_y =
y;
2686 layers[1].clip_width = fore_im->width;
2687 layers[1].clip_height = fore_im->height;
2689 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, rimg->width, rimg->height,
2692 destroy_asimage(&fore_im);
2725 Warning(
"Merge",
"Visual not initiated");
2729 ASImage *rendered_im;
2730 ASImageLayer layers[2];
2732 init_image_layers(&(layers[0]), 2);
2734 layers[0].dst_x = 0;
2735 layers[0].dst_y = 0;
2736 layers[0].clip_width =
fImage->width;
2737 layers[0].clip_height =
fImage->height;
2738 layers[0].bevel = 0;
2739 layers[1].im = ((
TASImage*)im)->fImage;
2740 layers[1].dst_x =
x;
2741 layers[1].dst_y =
y;
2742 layers[1].clip_width = im->
GetWidth();
2743 layers[1].clip_height = im->
GetHeight();
2744 layers[1].merge_scanlines = blend_scanlines_name2func(op ? op :
"add");
2762 Warning(
"Blur",
"Visual not initiated");
2767 fImage = create_asimage(100, 100, 0);
2770 Warning(
"Blur",
"Failed to create image");
2777 ASImage *rendered_im = blur_asimage_gauss(
fgVisual,
fImage, hr > 0 ? hr : 3,
2778 vr > 0 ? vr : 3, SCL_DO_ALL,
2791 Warning(
"Clone",
"Image not initiated");
2798 Warning(
"Clone",
"Failed to create image");
2814 if (
fImage->alt.argb32) {
2816 im->
fImage->alt.argb32 = (ARGB32*)safemalloc(sz*
sizeof(ARGB32));
2817 memcpy(im->
fImage->alt.argb32,
fImage->alt.argb32, sz *
sizeof(ARGB32));
2837 Warning(
"Vectorize",
"Visual not initiated");
2842 fImage = create_asimage(100, 100, 0);
2845 Warning(
"Vectorize",
"Failed to create image");
2856 dither = dither > 7 ? 7 : dither;
2858 res = colormap_asimage(
fImage, &cmap, max_colors, dither, opaque_threshold);
2870 g = INDEX_SHIFT_GREEN(cmap.entries[res[i]].green);
2871 b = INDEX_SHIFT_BLUE(cmap.entries[res[i]].blue);
2872 r = INDEX_SHIFT_RED(cmap.entries[res[i]].red);
2874 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2884 for (
UInt_t j = 0; j < cmap.count; j++) {
2885 g = INDEX_SHIFT_GREEN(cmap.entries[j].green);
2886 b = INDEX_SHIFT_BLUE(cmap.entries[j].blue);
2887 r = INDEX_SHIFT_RED(cmap.entries[j].red);
2888 v = MAKE_INDEXED_COLOR24(
r,
g,
b);
2890 v = (
v>>12) & 0x0FFF;
2893 pal->
fColorRed[j] = cmap.entries[j].red << 8;
2895 pal->
fColorBlue[j] = cmap.entries[j].blue << 8;
2899 destroy_colormap(&cmap,
kTRUE);
2902 fImage->alt.vector = vec;
2905 if (res) safefree(res);
2951 Warning(
"HSV",
"Visual not initiated");
2959 Warning(
"HSV",
"Failed to create image");
2969 height = !height ?
fImage->height : height;
2971 ASImage *rendered_im = 0;
2975 hue, radius,
H,
S, V, ASA_ASImage, 100,
2976 ASIMAGE_QUALITY_TOP);
2979 Warning(
"HSV",
"Failed to create rendered image");
3014 Warning(
"Gradient",
"Visual not initiated");
3018 ASImage *rendered_im = 0;
3019 ASGradient gradient;
3021 int reverse = 0, npoints1 = 0, npoints2 = 0;
3028 if ((angle > 2 * 180 * 15 / 16) || (angle < 2 * 180 * 1 / 16)) {
3029 gradient.type = GRADIENT_Left2Right;
3030 }
else if (angle < 2 * 180 * 3 / 16) {
3031 gradient.type = GRADIENT_TopLeft2BottomRight;
3032 }
else if (angle < 2 * 180 * 5 / 16) {
3033 gradient.type = GRADIENT_Top2Bottom;
3034 }
else if (angle < 2 * 180 * 7 / 16) {
3035 gradient.type = GRADIENT_BottomLeft2TopRight; reverse = 1;
3036 }
else if (angle < 2 * 180 * 9 / 16) {
3037 gradient.type = GRADIENT_Left2Right; reverse = 1;
3038 }
else if (angle < 2 * 180 * 11 / 16) {
3039 gradient.type = GRADIENT_TopLeft2BottomRight; reverse = 1;
3040 }
else if (angle < 2 * 180 * 13 / 16) {
3041 gradient.type = GRADIENT_Top2Bottom; reverse = 1;
3043 gradient.type = GRADIENT_BottomLeft2TopRight;
3046 for (p = (
char*)
colors; isspace((
int)*p); p++) { }
3048 for (npoints1 = 0; *p; npoints1++) {
3050 for ( ; *p && !isspace((
int)*p); p++) { }
3052 for ( ; isspace((
int)*p); p++) { }
3055 for (p = (
char*)offsets; isspace((
int)*p); p++) { }
3057 for (npoints2 = 0; *p; npoints2++) {
3059 for ( ; *p && !isspace((
int)*p); p++) { }
3061 for ( ; isspace((
int)*p); p++) { }
3066 if (offsets && (npoints1 > npoints2)) npoints1 = npoints2;
3075 gradient.color =
new ARGB32[npoints1];
3076 gradient.offset =
new double[npoints1];
3078 for (p = (
char*)
colors; isspace((
int)*p); p++) { }
3080 for (npoints1 = 0; *p; ) {
3084 for ( ; *p && !isspace((
int)*p); p++) { }
3086 for ( ; isspace((
int)*p); p++) { }
3088 col = str(pb -
colors, p - pb);
3090 if (parse_argb_color(col.
Data(), gradient.color + npoints1) != col) {
3093 Warning(
"Gradient",
"Failed to parse color [%s] - defaulting to black", pb);
3098 for (p = (
char*)offsets; isspace((
int)*p); p++) { }
3100 for (npoints2 = 0; *p; ) {
3104 for ( ; *p && !isspace((
int)*p); p++) { }
3107 gradient.offset[npoints2] = strtod(pb, &pb);
3109 if (pb == p) npoints2++;
3111 for ( ; isspace((
int)*p); p++) { }
3114 for (npoints2 = 0; npoints2 < npoints1; npoints2++) {
3115 gradient.offset[npoints2] = (
double)npoints2 / (npoints1 - 1);
3118 gradient.npoints = npoints1;
3120 if (npoints2 && (gradient.npoints > npoints2)) {
3121 gradient.npoints = npoints2;
3124 for (i = 0; i < gradient.npoints/2; i++) {
3125 int i2 = gradient.npoints - 1 - i;
3126 ARGB32
c = gradient.color[i];
3127 double o = gradient.offset[i];
3128 gradient.color[i] = gradient.color[i2];
3129 gradient.color[i2] =
c;
3130 gradient.offset[i] = gradient.offset[i2];
3131 gradient.offset[i2] = o;
3133 for (i = 0; i < gradient.npoints; i++) {
3134 gradient.offset[i] = 1.0 - gradient.offset[i];
3137 rendered_im = make_gradient(
fgVisual, &gradient,
width, height, SCL_DO_ALL,
3140 delete [] gradient.color;
3141 delete [] gradient.offset;
3145 Warning(
"Gradient",
"Failed to create gradient image");
3154 ASImageLayer layers[2];
3156 init_image_layers(&(layers[0]), 2);
3158 layers[0].dst_x = 0;
3159 layers[0].dst_y = 0;
3160 layers[0].clip_width =
fImage->width;
3161 layers[0].clip_height =
fImage->height;
3162 layers[0].bevel = 0;
3163 layers[1].im = rendered_im;
3164 layers[1].dst_x =
x;
3165 layers[1].dst_y =
y;
3166 layers[1].clip_width =
width;
3167 layers[1].clip_height = height;
3168 layers[1].merge_scanlines = alphablend_scanlines;
3173 Warning(
"Gradient",
"Failed to create merged image");
3177 destroy_asimage(&rendered_im);
3192 cmp = (cmp * 12) / 10;
3194 return (cmp > 255) ? 255 : cmp;
3215 return (background >> 1) & 0x7F7F7F7F;
3226 a = ARGB32_ALPHA8(foreground) + ARGB32_ALPHA8(background);
3228 r = ARGB32_RED8(foreground) + ARGB32_RED8(background);
3230 g = ARGB32_GREEN8(foreground) + ARGB32_GREEN8(background);
3232 b = ARGB32_BLUE8(foreground) + ARGB32_BLUE8(background);
3235 return MAKE_ARGB32(
a,
r,
g,
b);
3251 const char *hi_color,
const char *lo_color,
UShort_t thick,
3255 Warning(
"Bevel",
"Visual not initiated");
3262 ARGB32
hi=ARGB32_White, lo=ARGB32_White;
3263 parse_argb_color(hi_color, &
hi);
3264 parse_argb_color(lo_color, &lo);
3267 bevel.lo_color =
hi;
3269 bevel.hi_color = lo;
3272 bevel.hi_color =
hi;
3274 bevel.lo_color = lo;
3279 int extra_hilite = 2;
3280 bevel.left_outline = bevel.top_outline = bevel.right_outline = bevel.bottom_outline = thick;
3281 bevel.left_inline = bevel.top_inline = bevel.right_inline = bevel.bottom_inline = extra_hilite + 1;
3283 if (bevel.top_outline > 1) {
3284 bevel.top_inline += bevel.top_outline - 1;
3287 if (bevel.left_outline > 1) {
3288 bevel.left_inline += bevel.left_outline - 1;
3291 if (bevel.right_outline > 1) {
3292 bevel.right_inline += bevel.right_outline - 1;
3295 if (bevel.bottom_outline > 1) {
3296 bevel.bottom_inline += bevel.bottom_outline - 1;
3300 ARGB32
fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ? bevel.hilo_color : (bevel.hilo_color | 0xff000000);
3306 Warning(
"Bevel",
"Failed to create image");
3316 height = !height ?
fImage->height : height;
3318 ASImageLayer layers[2];
3319 init_image_layers(&(layers[0]), 2);
3322 layers[0].dst_x = 0;
3323 layers[0].dst_y = 0;
3324 layers[0].clip_width =
fImage->width;
3325 layers[0].clip_height =
fImage->height;
3326 layers[0].bevel = 0;
3328 UInt_t w =
width - (bevel.left_outline + bevel.right_outline);
3329 UInt_t h = height - (bevel.top_outline + bevel.bottom_outline);
3330 ASImage *bevel_im = create_asimage(w,
h, 0);
3333 Warning(
"Bevel",
"Failed to create bevel image");
3337 layers[1].im = bevel_im;
3340 layers[1].dst_x =
x;
3341 layers[1].dst_y =
y;
3342 layers[1].clip_width =
width;
3343 layers[1].clip_height = height;
3344 layers[1].bevel = &bevel;
3345 layers[1].merge_scanlines = alphablend_scanlines;
3349 destroy_asimage(&bevel_im);
3352 Warning(
"Bevel",
"Failed to image");
3372 Warning(
"Pad",
"Visual not initiated");
3377 fImage = create_asimage(100, 100, 0);
3380 Warning(
"Pad",
"Failed to create image");
3389 ARGB32 color = ARGB32_White;
3390 parse_argb_color(col, &color);
3401 Warning(
"Pad",
"Failed to create output image");
3418 Warning(
"Crop",
"Visual not initiated");
3431 height =
y + height >
fImage->height ?
fImage->height -
y : height;
3434 Warning(
"Crop",
"input size larger than image");
3437 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
3441 Warning(
"Crop",
"Failed to start image decoding");
3445 ASImage *img = create_asimage(
width, height, 0);
3449 Warning(
"Crop",
"Failed to create image");
3453 ASImageOutput *imout = start_image_output(
fgVisual, img, ASA_ASImage,
3457 Warning(
"Crop",
"Failed to start image output");
3458 destroy_asimage(&img);
3459 if (imdec)
delete [] imdec;
3467 for (
UInt_t i = 0; i < height; i++) {
3468 imdec->decode_image_scanline(imdec);
3469 imout->output_image_scanline(imout, &(imdec->buffer), 1);
3472 stop_image_decoding(&imdec);
3473 stop_image_output(&imout);
3497 Warning(
"Append",
"Visual not initiated");
3515 }
else if (opt ==
"/") {
3517 Merge(im,
"alphablend", 0, height);
3536 Warning(
"BeginPaint",
"Visual not initiated");
3551 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
3554 Warning(
"BeginPaint",
"Failed to create image");
3568 Warning(
"EndPaint",
"no image");
3572 if (!
fImage->alt.argb32)
return;
3575 0, ASA_ASImage, 0, ASIMAGE_QUALITY_DEFAULT);
3578 Warning(
"EndPaint",
"Failed to create image");
3595 Warning(
"GetArgbArray",
"no image");
3602 if (!img->alt.argb32) {
3612 return (
UInt_t *)img->alt.argb32;
3623 Warning(
"GetRgbaArray",
"no image");
3630 if (!img->alt.argb32) {
3648 for (i = 0; i < img->height; i++) {
3649 for (j = 0; j < img->width; j++) {
3651 argb = img->alt.argb32[idx];
3653 rgb = argb & 0x00ffffff;
3654 rgba = (rgb << 8) +
a;
3669 Warning(
"GetScanline",
"no image");
3674 CARD32 *ret =
new CARD32[img->width];
3676 ASImageDecoder *imdec = start_image_decoding(
fgVisual, img, SCL_DO_ALL,
3677 0,
y, img->width, 1, 0);
3681 Warning(
"GetScanline",
"Failed to start image decoding");
3689 imdec->decode_image_scanline(imdec);
3690 memcpy(imdec->buffer.buffer, ret, img->width*
sizeof(CARD32));
3691 stop_image_decoding(&imdec);
3706#if defined(R__GNU) && defined(__i386__) && !defined(__sun)
3707#define _MEMSET_(dst, lng, val) __asm__("movl %0,%%eax \n"\
3708 "movl %1,%%edi \n" \
3709 "movl %2,%%ecx \n" \
3714 :"g" (val), "g" (dst), "g" (lng) \
3715 :"eax","edi","ecx" \
3719 #define _MEMSET_(dst, lng, val) do {\
3720 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0)
3724#define FillSpansInternal(npt, ppt, widths, color) do {\
3725 UInt_t yy = ppt[0].fY*fImage->width;\
3726 for (UInt_t i = 0; i < npt; i++) {\
3727 _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\
3728 yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\
3740 Warning(
"FillRectangle",
"Visual not initiated");
3745 Warning(
"FillRectangle",
"no image");
3749 if (!
fImage->alt.argb32) {
3753 if (!
fImage->alt.argb32) {
3754 Warning(
"FillRectangle",
"Failed to get pixel array");
3758 ARGB32 color = (ARGB32)col;
3761 if (height == 0) height = 1;
3772 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
3778 height =
y + height >
fImage->height ?
fImage->height -
y : height;
3780 if (!
fImage->alt.argb32) {
3785 ARGB32 *p0 =
fImage->alt.argb32 + yyy +
x;
3787 for (
UInt_t i = 0; i < height; i++) {
3792 for (
UInt_t i =
y; i <
y + height; i++) {
3817 Warning(
"Fill",
"Visual not initiated");
3821 ARGB32 color = ARGB32_White;
3824 parse_argb_color(col, &color);
3842 ARGB32 color = (ARGB32)col;
3845 if (!thick) thick = 1;
3853 thick += (
x - half);
3861 int yy = y1*
fImage->width;
3863 for (
UInt_t w = 0; w < thick; w++) {
3864 if (
x + w < fImage->
width) {
3877 ARGB32 color = (ARGB32)col;
3880 if (!thick) thick = 1;
3888 thick += (
y - half);
3897 for (
UInt_t w = 0; w < thick; w++) {
3899 if (
y + w < fImage->height) {
3911 const char *col,
UInt_t thick)
3913 ARGB32 color = ARGB32_White;
3914 parse_argb_color(col, &color);
3926 int x,
y, xend, yend;
3933 Warning(
"DrawLine",
"Visual not initiated");
3938 Warning(
"DrawLine",
"no image");
3942 if (!
fImage->alt.argb32) {
3946 if (!
fImage->alt.argb32) {
3947 Warning(
"DrawLine",
"Failed to get pixel array");
3951 ARGB32 color = (ARGB32)col;
3956 if (!dx && !dy)
return;
3960 y2 > y1 ? y2 : y1, color, thick);
3978 i2 = i1 - (dx << 1);
3995 q = (y2 - y1) * ydir;
4028 i2 = i1 - (dy << 1);
4045 q = (
x2 -
x1) * xdir;
4083 const char *col,
UInt_t thick)
4086 Warning(
"DrawRectangle",
"Visual not initiated");
4095 fImage = create_asimage(w,
h, 0);
4100 if (!
fImage->alt.argb32) {
4104 if (!
fImage->alt.argb32) {
4105 Warning(
"DrawRectangle",
"Failed to get pixel array");
4109 ARGB32 color = ARGB32_White;
4110 parse_argb_color(col, &color);
4130 ARGB32 color = ARGB32_White;
4135 fImage = create_asimage(w,
h, 0);
4141 parse_argb_color(col, &color);
4147 parse_argb_color(col, &color);
4177 ARGB32 color = (ARGB32)col;
4187 thick += (
y - half);
4190 thick = thick <= 0 ? 1 : thick;
4199 x2 =
x2 < tmp ? tmp :
x2;
4202 for (
UInt_t w = 0; w < thick; w++) {
4203 if (
y + w < fImage->height) {
4211 if (i >= pDash[iDash]) {
4215 if (iDash >= nDash) {
4231 ARGB32 color = (ARGB32)col;
4241 thick += (
x - half);
4244 thick = thick <= 0 ? 1 : thick;
4251 y1 = y2 < y1 ? y2 : y1;
4252 y2 = y2 < tmp ? tmp : y2;
4256 int yy = y1*
fImage->width;
4258 for (
UInt_t w = 0; w < thick; w++) {
4259 if (
x + w < fImage->
width) {
4267 if (i >= pDash[iDash]) {
4271 if (iDash >= nDash) {
4287 int x,
y, xend, yend;
4297 char *pDash =
new char[nDash];
4302 for (i = 0; i < (
int)nDash; i++) {
4308 i2 = i1 - (dx << 1);
4326 q = (y2 - y1) * ydir;
4331 if ((iDash%2) == 0) {
4343 if (i >= pDash[iDash]) {
4347 if (iDash >= nDash) {
4355 if ((iDash%2) == 0) {
4367 if (i >= pDash[iDash]) {
4371 if (iDash >= nDash) {
4380 for (i = 0; i < (
int)nDash; i++) {
4386 i2 = i1 - (dy << 1);
4404 q = (
x2 -
x1) * xdir;
4409 if ((iDash%2) == 0) {
4423 if (i >= pDash[iDash]) {
4427 if (iDash >= nDash) {
4435 if ((iDash%2) == 0) {
4449 if (i >= pDash[iDash]) {
4453 if (iDash >= nDash) {
4471 double x,
y, xend=0, yend=0, x0, y0;
4479 double *xDash =
new double[nDash];
4480 double *yDash =
new double[nDash];
4485 for (i = 0; i < (
int)nDash; i++) {
4486 xDash[i] = tDash[i] * ac;
4487 yDash[i] = tDash[i] *
as;
4491 xDash[i] = xDash[i]/2;
4492 yDash[i] = yDash[i]/2;
4494 xDash[i] = xDash[i]*2;
4495 yDash[i] = yDash[i]*2;
4512 q = (y2 - y1) * ydir;
4519 while ((
x < xend) && (
y < yend)) {
4523 if ((iDash%2) == 0) {
4533 if (iDash >= nDash) {
4538 while ((
x < xend) && (
y > yend)) {
4542 if ((iDash%2) == 0) {
4552 if (iDash >= nDash) {
4571 q = (
x2 -
x1) * xdir;
4578 while ((
x < xend) && (
y < yend)) {
4582 if ((iDash%2) == 0) {
4592 if (iDash >= nDash) {
4597 while ((
x > xend) && (
y < yend)) {
4601 if ((iDash%2) == 0) {
4611 if (iDash >= nDash) {
4625 const char *pDash,
const char *col,
UInt_t thick)
4629 Warning(
"DrawDashLine",
"Visual not initiated");
4634 Warning(
"DrawDashLine",
"no image");
4638 if (!
fImage->alt.argb32) {
4642 if (!
fImage->alt.argb32) {
4643 Warning(
"DrawDashLine",
"Failed to get pixel array");
4647 if ((nDash < 2) || !pDash || (nDash%2)) {
4648 Warning(
"DrawDashLine",
"Wrong input parameters n=%d %ld", nDash, (
Long_t)
sizeof(pDash)-1);
4652 ARGB32 color = ARGB32_White;
4653 parse_argb_color(col, &color);
4657 }
else if (y1 == y2) {
4671 ARGB32 color = ARGB32_White;
4672 parse_argb_color(col, &color);
4679 for (
UInt_t i = 1; i < nn; i++) {
4696 Warning(
"PutPixel",
"Visual not initiated");
4701 Warning(
"PutPixel",
"no image");
4705 if (!
fImage->alt.argb32) {
4709 if (!
fImage->alt.argb32) {
4710 Warning(
"PutPixel",
"Failed to get pixel array");
4715 parse_argb_color(col, &color);
4717 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4718 Warning(
"PutPixel",
"Out of range width=%d x=%d, height=%d y=%d",
4731 Warning(
"PolyPoint",
"Visual not initiated");
4736 Warning(
"PolyPoint",
"no image");
4740 if (!
fImage->alt.argb32) {
4744 if (!
fImage->alt.argb32) {
4745 Warning(
"PolyPoint",
"Failed to get pixel array");
4750 Warning(
"PolyPoint",
"No points specified");
4757 parse_argb_color(col, &color);
4763 for (i = 0; i < npt; i++) {
4764 ipt[i].
fX += ppt[i].
fX;
4765 ipt[i].
fY += ppt[i].
fY;
4770 for (i = 0; i < npt; i++) {
4771 x = ipt ? ipt[i].
fX : ppt[i].
fX;
4772 y = ipt ? ipt[i].
fY : ppt[i].
fY;
4774 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4790 if (!nseg || !seg) {
4791 Warning(
"DrawSegments",
"Invalid data nseg=%d seg=0x%lx", nseg, (
Long_t)seg);
4797 for (
UInt_t i = 0; i < nseg; i++) {
4798 pt[0].fX = seg->
fX1;
4799 pt[1].fX = seg->
fX2;
4800 pt[0].fY = seg->
fY1;
4801 pt[1].fY = seg->
fY2;
4815 Warning(
"FillSpans",
"Visual not initiated");
4820 Warning(
"FillSpans",
"no image");
4824 if (!
fImage->alt.argb32) {
4828 if (!
fImage->alt.argb32) {
4829 Warning(
"FillSpans",
"Failed to get pixel array");
4833 if (!npt || !ppt || !widths || (stipple && (!w || !
h))) {
4834 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%lx col=%s widths=0x%lx stipple=0x%lx w=%d h=%d",
4840 parse_argb_color(col, &color);
4845 for (
UInt_t i = 0; i < npt; i++) {
4847 for (
UInt_t j = 0; j < widths[i]; j++) {
4848 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4859 if (stipple[ii >> 3] & (1 << (ii%8))) {
4873 Warning(
"FillSpans",
"Visual not initiated");
4878 Warning(
"FillSpans",
"no image");
4882 if (!
fImage->alt.argb32) {
4886 if (!
fImage->alt.argb32) {
4887 Warning(
"FillSpans",
"Failed to get pixel array");
4891 if (!npt || !ppt || !widths || !tile) {
4892 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%lx widths=0x%lx tile=0x%lx",
4906 for (
UInt_t i = 0; i < npt; i++) {
4909 for (
UInt_t j = 0; j < widths[i]; j++) {
4910 if ((ppt[i].fX >= (
Int_t)
fImage->width) || (ppt[i].
fX < 0) ||
4929 Warning(
"CropSpans",
"Visual not initiated");
4934 Warning(
"CropSpans",
"no image");
4938 if (!
fImage->alt.argb32) {
4942 if (!
fImage->alt.argb32) {
4943 Warning(
"CropSpans",
"Failed to get pixel array");
4947 if (!npt || !ppt || !widths) {
4948 Warning(
"CropSpans",
"No points specified npt=%d ppt=0x%lx widths=0x%lx", npt, (
Long_t)ppt, (
Long_t)widths);
4953 int y1 = ppt[npt-1].
fY;
4961 for (
y = 0; (
int)
y < y0;
y++) {
4964 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4969 for (i = 0; i < npt; i++) {
4970 for (
x = 0; (
int)
x < ppt[i].fX;
x++) {
4972 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4974 for (
x = ppt[i].fX + widths[i] + 1;
x <
fImage->width;
x++) {
4976 if (idx < sz)
fImage->alt.argb32[idx] = 0;
4984 if (idx < sz)
fImage->alt.argb32[idx] = 0;
5018 Warning(
"CopyArea",
"Visual not initiated");
5023 Warning(
"CopyArea",
"no image");
5028 ASImage *out = ((
TASImage*)dst)->GetImage();
5034 xsrc = xsrc < 0 ? 0 : xsrc;
5035 ysrc = ysrc < 0 ? 0 : ysrc;
5037 if ((xsrc >= (
int)
fImage->width) || (ysrc >= (
int)
fImage->height))
return;
5039 w = xsrc + w >
fImage->width ?
fImage->width - xsrc : w;
5043 if (!
fImage->alt.argb32) {
5046 if (!out->alt.argb32) {
5048 out = ((
TASImage*)dst)->GetImage();
5051 if (
fImage->alt.argb32 && out->alt.argb32) {
5052 for (
y = 0;
y < (
int)
h;
y++) {
5053 for (
x = 0;
x < (
int)w;
x++) {
5054 idx =
Idx(yy +
x + xsrc);
5055 if ((
x + xdst < 0) || (ydst +
y < 0) ||
5056 (
x + xdst >= (
int)out->width) || (
y + ydst >= (
int)out->height) )
continue;
5058 idx2 =
Idx((ydst +
y)*out->width +
x + xdst);
5062 out->alt.argb32[idx2] = 0;
5065 out->alt.argb32[idx2] &=
fImage->alt.argb32[idx];
5068 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] & (~out->alt.argb32[idx2]);
5071 out->alt.argb32[idx2] &= ~fImage->alt.argb32[idx];
5076 out->alt.argb32[idx2] ^=
fImage->alt.argb32[idx];
5079 out->alt.argb32[idx2] |=
fImage->alt.argb32[idx];
5082 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) & (~out->alt.argb32[idx2]);
5085 out->alt.argb32[idx2] ^= ~fImage->alt.argb32[idx];
5088 out->alt.argb32[idx2] = ~out->alt.argb32[idx2];
5091 out->alt.argb32[idx2] =
fImage->alt.argb32[idx] | (~out->alt.argb32[idx2]);
5094 out->alt.argb32[idx2] = ~fImage->alt.argb32[idx];
5097 out->alt.argb32[idx2] |= ~fImage->alt.argb32[idx];
5100 out->alt.argb32[idx2] = (~fImage->alt.argb32[idx]) | (~out->alt.argb32[idx2]);
5103 out->alt.argb32[idx2] = 0xFFFFFFFF;
5107 out->alt.argb32[idx2] =
fImage->alt.argb32[idx];
5131 int i, j, ix, iy, w,
h;
5133 ARGB32 color = 0xFFFFFFFF;
5140 for (i = 0; i < nx; i++) {
5142 for (j = 0; j < ny; j++) {
5143 icol = (ARGB32)ic[i + (nx*j)];
5144 if (icol != color) {
5198 return (ptMin - ptsStart);
5214 int mr = 0, m1r = 0;
5215 int incr1l = 0, incr2l = 0;
5216 int incr1r = 0, incr2r = 0;
5221 int nextleft, nextright;
5234 Warning(
"GetPolygonSpans",
"Visual not initiated");
5239 Warning(
"GetPolygonSpans",
"no image");
5243 if (!
fImage->alt.argb32) {
5247 if (!
fImage->alt.argb32) {
5248 Warning(
"GetPolygonSpans",
"Failed to get pixel array");
5252 if ((npt < 3) || !ppt) {
5253 Warning(
"GetPolygonSpans",
"No points specified npt=%d ppt=0x%lx", npt, (
Long_t)ppt);
5262 if ((npt < 3) || (dy < 0))
return kFALSE;
5264 ptsOut = firstPoint =
new TPoint[dy];
5268 nextleft = nextright = imin;
5269 y = ppt[nextleft].
fY;
5274 if (ppt[nextleft].fY ==
y) {
5280 if (nextleft >= (
int)npt) {
5287 ppt[left].fX, ppt[nextleft].fX,
5288 xl, dl, ml, m1l, incr1l, incr2l);
5292 if (ppt[nextright].fY ==
y) {
5298 if (nextright < 0) {
5305 ppt[right].fX, ppt[nextright].fX,
5306 xr, dr, mr, m1r, incr1r, incr2r);
5311 i =
TMath::Min(ppt[nextleft].fY, ppt[nextright].fY) -
y;
5315 delete [] firstWidth;
5316 delete [] firstPoint;
5325 *(
width++) = xr - xl;
5326 (ptsOut++)->fX = xl;
5328 *(
width++) = xl - xr;
5329 (ptsOut++)->fX = xr;
5337 }
while (
y !=
ymax);
5339 *nspans =
UInt_t(ptsOut - firstPoint);
5340 *outPoint = firstPoint;
5341 *outWidth = firstWidth;
5358 ARGB32 color = ARGB32_White;
5359 parse_argb_color(col, &color);
5362 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5365 FillSpans(nspans, firstPoint, firstWidth, col, stipple, w,
h);
5369 delete [] firstWidth;
5370 delete [] firstPoint;
5373 if (firstWidth)
delete [] firstWidth;
5374 if (firstPoint)
delete [] firstPoint;
5391 FillSpans(nspans, firstPoint, firstWidth, tile);
5394 delete [] firstWidth;
5395 delete [] firstPoint;
5398 if (firstWidth)
delete [] firstWidth;
5399 if (firstPoint)
delete [] firstPoint;
5415 CropSpans(nspans, firstPoint, firstWidth);
5418 delete [] firstWidth;
5419 delete [] firstPoint;
5422 if (firstWidth)
delete [] firstWidth;
5423 if (firstPoint)
delete [] firstPoint;
5436 Warning(
"DrawFillArea",
"Visual not initiated");
5441 Warning(
"DrawFillArea",
"no image");
5445 if (!
fImage->alt.argb32) {
5449 if (!
fImage->alt.argb32) {
5450 Warning(
"DrawFillArea",
"Failed to get pixel array");
5454 if ((count < 3) || !ptsIn) {
5455 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%lx", count, (
Long_t)ptsIn);
5464 ARGB32 color = ARGB32_White;
5465 parse_argb_color(col, &color);
5483 static const UInt_t gEdgeTableEntryCacheSize = 200;
5484 static EdgeTableEntry gEdgeTableEntryCache[gEdgeTableEntryCacheSize];
5486 if (count < gEdgeTableEntryCacheSize) {
5494 ptsOut = firstPoint;
5497 pSLL = ET.scanlines.next;
5499 for (
y = ET.ymin;
y < ET.ymax;
y++) {
5500 if (pSLL &&
y == pSLL->scanline) {
5501 loadAET(&AET, pSLL->edgelist);
5508 ptsOut->
fX = pAET->bres.minor_axis;
5513 *
width++ = pAET->next->bres.minor_axis - pAET->bres.minor_axis;
5516 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5519 FillSpans(nPts, firstPoint, firstWidth, col, stipple, w,
h);
5521 ptsOut = firstPoint;
5532 if (!stipple && ((color & 0xff000000)==0xff000000)) {
5535 FillSpans(nPts, firstPoint, firstWidth, col, stipple, w,
h);
5539 if (del)
delete [] pETEs;
5549 Warning(
"DrawFillArea",
"Visual not initiated");
5554 Warning(
"DrawFillArea",
"no image");
5558 if (!
fImage->alt.argb32) {
5562 if (!
fImage->alt.argb32) {
5563 Warning(
"DrawFillArea",
"Failed to get pixel array");
5567 if ((count < 3) || !ptsIn) {
5568 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%lx", count, (
Long_t)ptsIn);
5594 ptsOut = firstPoint;
5597 pSLL = ET.scanlines.next;
5599 for (
y = ET.ymin;
y < ET.ymax;
y++) {
5600 if (pSLL &&
y == pSLL->scanline) {
5601 loadAET(&AET, pSLL->edgelist);
5608 ptsOut->
fX = pAET->bres.minor_axis;
5613 *
width++ = pAET->next->bres.minor_axis - pAET->bres.minor_axis;
5616 FillSpans(nPts, firstPoint, firstWidth, tile);
5617 ptsOut = firstPoint;
5626 FillSpans(nPts, firstPoint, firstWidth, tile);
5637 ASDrawContext *ctx =
new ASDrawContext;
5639 ctx->canvas_width = im->width;
5640 ctx->canvas_height = im->height;
5641 ctx->canvas = im->alt.argb32;
5642 ctx->scratch_canvas = 0;
5644 ctx->flags = ASDrawCTX_CanvasIsARGB;
5645 asim_set_custom_brush_colored( ctx, brush);
5655 if (ctx->scratch_canvas)
free(ctx->scratch_canvas);
5669 Int_t sz = thick*thick;
5676 matrix =
new CARD32[sz];
5679 for (
int i = 0; i < sz; i++) {
5680 matrix[i] = (CARD32)color;
5684 brush.matrix = matrix;
5685 brush.width = thick;
5686 brush.height = thick;
5687 brush.center_y = brush.center_x = thick/2;
5696 if (xx1 ==
fImage->width) --xx1;
5697 if (yy1 ==
fImage->height) --yy1;
5698 if (xx2 ==
fImage->width) --xx2;
5699 if (yy2 ==
fImage->height) --yy2;
5701 asim_move_to(ctx, xx1, yy1);
5702 asim_line_to(ctx, xx2, yy2);
5717 Bool_t has_alpha = (color & 0xff000000) != 0xff000000;
5721 FT_Bitmap *source = (FT_Bitmap*)bitmap;
5724 Int_t dots =
Int_t(source->width * source->rows);
5728 yy = y0 = by > 0 ? by *
fImage->width : 0;
5729 for (
y = 0;
y < (
int) source->rows;
y++) {
5731 if ((byy >= (
int)
fImage->height) || (byy <0))
continue;
5733 for (
x = 0;
x < (
int) source->width;
x++) {
5735 if ((bxx >= (
int)
fImage->width) || (bxx < 0))
continue;
5737 idx =
Idx(bxx + yy);
5738 r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
5739 g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
5740 b += (
fImage->alt.argb32[idx] & 0x0000ff);
5750 col[0] = (
r << 16) + (
g << 8) +
b;
5752 Int_t col4r = (col[4] & 0xff0000) >> 16;
5753 Int_t col4g = (col[4] & 0x00ff00) >> 8;
5754 Int_t col4b = (col[4] & 0x0000ff);
5757 for (
x = 3;
x > 0;
x--) {
5759 Int_t colxr = (col4r*
x +
r*xx) >> 2;
5760 Int_t colxg = (col4g*
x +
g*xx) >> 2;
5761 Int_t colxb = (col4b*
x +
b*xx) >> 2;
5762 col[
x] = (colxr << 16) + (colxg << 8) + colxb;
5768 Int_t clipx1=0, clipx2=0, clipy1=0, clipy2=0;
5773 clipx1 =
gPad->XtoAbsPixel(
gPad->GetX1())*is;
5774 clipx2 =
gPad->XtoAbsPixel(
gPad->GetX2())*is;
5775 clipy1 =
gPad->YtoAbsPixel(
gPad->GetY1())*is;
5776 clipy2 =
gPad->YtoAbsPixel(
gPad->GetY2())*is;
5780 for (
y = 0;
y < (
int) source->rows;
y++) {
5783 for (
x = 0;
x < (
int) source->width;
x++) {
5787 d = ((
d + 10) * 5) >> 8;
5791 if ( noClip || ((
x < (
int) source->width) &&
5792 (bxx < (
int)clipx2) && (bxx >= (
int)clipx1) &&
5793 (byy >= (
int)clipy2) && (byy < (
int)clipy1) )) {
5794 idx =
Idx(bxx + yy);
5795 acolor = (ARGB32)col[
d];
5799 fImage->alt.argb32[idx] = acolor;
5818 Warning(
"DrawText",
"Visual not initiated");
5822 if (!
fImage->alt.argb32) {
5847 const wchar_t *wcsTitle =
reinterpret_cast<const wchar_t *
>(
text->
GetWcsTitle());
5848 if (wcsTitle != NULL) {
5858 col =
gROOT->GetColor(1);
5861 ARGB32 color = ARGB32_White;
5915 if (align == 1 || align == 2 || align == 3) {
5917 }
else if (align == 4 || align == 5 || align == 6) {
5924 if (align == 3 || align == 6 || align == 9) {
5926 }
else if (align == 2 || align == 5 || align == 8) {
5933 ftal.x = (ftal.x >> 6);
5934 ftal.y = (ftal.y >> 6);
5939 if (FT_Glyph_To_Bitmap(&glyph->
fImage, ft_render_mode_normal, 0, 1 ))
continue;
5941 FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
5942 FT_Bitmap *source = &bitmap->bitmap;
5944 Int_t bx =
x - ftal.x + bitmap->left;
5945 Int_t by =
y + ftal.y - bitmap->top;
5973 if (FT_Glyph_To_Bitmap(&glyph->
fImage, ft_render_mode_normal, 0, 1 ))
continue;
5975 FT_BitmapGlyph bitmap = (FT_BitmapGlyph)glyph->
fImage;
5976 FT_Bitmap *source = &bitmap->bitmap;
5978 Int_t bx =
x + bitmap->left;
5979 Int_t by =
y +
h - bitmap->top;
5991 static ASImageExportParams params;
6001 ret = ASImage2xpmRawBuff(img, (CARD8 **)buffer, size, 0);
6004 ret = ASImage2PNGBuff(img, (CARD8 **)buffer, size, ¶ms);
6045 static ASImageImportParams params;
6049 params.filter = SCL_DO_ALL;
6050 params.gamma = SCREEN_GAMMA;
6051 params.gamma_table =
nullptr;
6052 params.compression = 0;
6053 params.format = ASA_ASImage;
6054 params.search_path = 0;
6055 params.subimage = 0;
6060 char *ptr = buffer[0];
6061 while (isspace((
int)*ptr)) ++ptr;
6063 fImage = xpm_data2ASImage((
const char**)buffer, ¶ms);
6065 fImage = xpmRawBuff2ASImage((
const char*)*buffer, ¶ms);
6070 fImage = PNGBuff2ASimage((CARD8 *)*buffer, ¶ms);
6101 static char *buf = 0;
6123 ASImage *rendered_im;
6124 ASImageLayer layers[2];
6125 init_image_layers(&(layers[0]), 2);
6127 layers[0].dst_x = 0;
6128 layers[0].dst_y = 0;
6129 layers[0].clip_width = img->width;
6130 layers[0].clip_height = img->height;
6131 layers[0].bevel = 0;
6133 layers[1].dst_x = 0;
6134 layers[1].dst_y = 0;
6135 layers[1].clip_width = img->width;
6136 layers[1].clip_height = img->height;
6137 layers[1].merge_scanlines = blend_scanlines_name2func(
"tint");
6138 rendered_im = merge_layers(
fgVisual, &(layers[0]), 2, img->width, img->height,
6140 destroy_asimage(&img);
6144 ASImage *padimg = 0;
6149 padimg = pad_asimage(
fgVisual, img, 0,
d, sz, sz, 0x00ffffff,
6153 padimg = pad_asimage(
fgVisual, img,
d, 0, sz, sz, 0x00ffffff,
6158 destroy_asimage(&img);
6163 ASImage2xpmRawBuff(padimg, (CARD8 **)ptr, &size, 0);
6166 destroy_asimage(&padimg);
6180 if (
b.IsReading()) {
6181 Version_t version =
b.ReadVersion(&R__s, &R__c);
6186 if ( version == 1 ) {
6187 Int_t fileVersion =
b.GetVersionOwner();
6188 if (fileVersion > 0 && fileVersion < 50000 ) {
6189 TImage::Streamer(
b);
6196 if ( fileVersion < 40200 ) {
6207 b.CheckByteCount(R__s, R__c, TASImage::IsA());
6212 TNamed::Streamer(
b);
6215 if (image_type != 0) {
6217 buffer =
new char[size];
6218 b.ReadFastArray(buffer, size);
6222 TAttImage::Streamer(
b);
6227 b.ReadFastArray(vec, size);
6231 b.CheckByteCount(R__s, R__c, TASImage::IsA());
6236 R__c =
b.WriteVersion(TASImage::IsA(),
kTRUE);
6241 TNamed::Streamer(
b);
6243 image_type =
fImage->alt.vector ? 0 : 1;
6246 if (image_type != 0) {
6249 b.WriteFastArray(buffer, size);
6252 TAttImage::Streamer(
b);
6257 b.SetByteCount(R__c,
kTRUE);
6266 if (
fImage->alt.vector) {
6308 if ((start > 0) && (stop - start > 0)) {
6319 Int_t sz = thick*thick;
6323 ARGB32 color = ARGB32_White;
6324 parse_argb_color(col, &color);
6329 matrix =
new CARD32[sz];
6332 for (
int i = 0; i < sz; i++) {
6333 matrix[i] = (CARD32)color;
6337 brush.matrix = matrix;
6338 brush.width = thick;
6339 brush.height = thick;
6340 brush.center_y = brush.center_x = thick/2;
6342 ASDrawContext *ctx = 0;
6345 asim_cube_bezier(ctx,
x1, y1,
x2, y2,
x3, y3);
6358 const char *col,
Int_t thick)
6360 thick = !thick ? 1 : thick;
6361 Int_t sz = thick*thick;
6365 ARGB32 color = ARGB32_White;
6366 parse_argb_color(col, &color);
6371 matrix =
new CARD32[sz];
6374 for (
int i = 0; i < sz; i++) {
6375 matrix[i] = (CARD32)color;
6379 brush.matrix = matrix;
6380 brush.width = thick > 0 ? thick : 1;
6381 brush.height = thick > 0 ? thick : 1;
6382 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6385 asim_straight_ellips(ctx,
x,
y, rx, ry, thick < 0);
6399 thick = !thick ? 1 : thick;
6400 Int_t sz = thick*thick;
6404 ARGB32 color = ARGB32_White;
6405 parse_argb_color(col, &color);
6411 matrix =
new CARD32[sz];
6414 for (
int i = 0; i < sz; i++) {
6415 matrix[i] = (CARD32)color;
6419 brush.matrix = matrix;
6420 brush.height = brush.width = thick > 0 ? thick : 1;
6421 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6424 asim_circle(ctx,
x,
y,
r, thick < 0);
6438 const char *col,
Int_t thick)
6440 thick = !thick ? 1 : thick;
6441 Int_t sz = thick*thick;
6445 ARGB32 color = ARGB32_White;
6446 parse_argb_color(col, &color);
6451 matrix =
new CARD32[sz];
6454 for (
int i = 0; i < sz; i++) {
6455 matrix[i] = (CARD32)color;
6459 brush.matrix = matrix;
6460 brush.width = thick > 0 ? thick : 1;
6461 brush.height = thick > 0 ? thick : 1;
6462 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6465 asim_ellips(ctx,
x,
y, rx, ry, angle, thick < 0);
6478 const char *col,
Int_t thick)
6480 thick = !thick ? 1 : thick;
6481 Int_t sz = thick*thick;
6485 ARGB32 color = ARGB32_White;
6486 parse_argb_color(col, &color);
6491 matrix =
new CARD32[sz];
6494 for (
int i = 0; i < sz; i++) {
6495 matrix[i] = (CARD32)color;
6499 brush.matrix = matrix;
6500 brush.width = thick > 0 ? thick : 1;
6501 brush.height = thick > 0 ? thick : 1;
6502 brush.center_y = brush.center_x = thick > 0 ? thick/2 : 0;
6505 asim_ellips2(ctx,
x,
y, rx, ry, angle, thick < 0);
6517 const char * ,
const char * )
6531 Warning(
"Gray",
"Image not initiated");
6536 Warning(
"Gray",
"Visual not initiated");
6561 if (
fImage->alt.argb32) {
6563 0, ASA_ARGB32, 0, ASIMAGE_QUALITY_DEFAULT);
6565 for (i = 0; i <
fImage->height; i++) {
6566 for (j = 0; j <
fImage->width; j++) {
6569 r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
6570 g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
6571 b = (
fImage->alt.argb32[idx] & 0x0000ff);
6572 l = (57*
r + 181*
g + 18*
b)/256;
6580 ASImageDecoder *imdec = start_image_decoding(
fgVisual,
fImage, SCL_DO_ALL,
6592 Warning(
"ToGray",
"Failed to start image output");
6599 CARD32 *aa = imdec->buffer.alpha;
6600 CARD32 *rr = imdec->buffer.red;
6601 CARD32 *gg = imdec->buffer.green;
6602 CARD32 *bb = imdec->buffer.blue;
6607 for (i = 0; i <
fImage->height; i++) {
6608 imdec->decode_image_scanline(imdec);
6609 result.flags = imdec->buffer.flags;
6610 result.back_color = imdec->buffer.back_color;
6612 for (j = 0; j <
fImage->width; j++) {
6613 l = (57*rr[j] + 181*gg[j]+ 18*bb[j])/256;
6614 result.alpha[j] = aa[j];
6616 result.green[j] =
l;
6619 imout->output_image_scanline(imout, &result, 1);
6622 stop_image_decoding(&imdec);
6623 stop_image_output(&imout);
6663 Warning(
"FromWindow",
"Visual not initiated");
6671 static int x11 = -1;
6672 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
6677 unsigned char *bits =
gVirtualX->GetColorBits(wid, 0, 0, w,
h);
6682 fImage = bitmap2asimage(bits, w,
h, 0, 0);
6697 for (
UInt_t i = 0; i <
h/2; ++i) {
6698 memcpy(xx, buf + 4*w*i, 4*w);
6699 memcpy(buf + 4*w*i, buf + 4*w*(
h-i-1), 4*w);
6700 memcpy(buf + 4*w*(
h-i-1), xx, 4*w);
6704 fImage = bitmap2asimage(buf, w,
h, 0, 0);
6717 if (!
fImage->alt.vector && on) {
6728 gPad->Range(-left / (1.0 - left - right),
6729 -bottom / (1.0 - top - bottom),
6730 1 + right / (1.0 - left - right),
6731 1 + top / ( 1.0 - top - bottom));
6732 gPad->RangeAxis(0, 0, 1, 1);
6758 name.ReplaceAll(
".",
"_");
6768 out << std::endl << str << std::endl << std::endl;
6771 out << xpm <<
"_img = TImage::Create();" << std::endl;
6772 out <<
" " << xpm <<
"_img->SetImageBuffer( (char **)" << xpm <<
", TImage::kXpm);" << std::endl;
6773 out <<
" " << xpm <<
"_img->Draw();" << std::endl;
6786 static char buf[32];
6787 FILE *fp = fopen(
name,
"rb+");
6790 printf(
"file %s : failed to open\n",
name);
6794 if (!fread(buf, 1, 20, fp)) {
6799 char dpi1 = (set & 0xffff) >> 8;
6800 char dpi2 = set & 0xff;
6805 for (i = 0; i < 20; i++) {
6806 if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) && (buf[i+2] == 0x49) &&
6807 (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
6813 if (i == 20 || dpi+4 >= 20) {
6815 printf(
"file %s : wrong JPEG format\n",
name);
6822 buf[dpi + 1] = dpi1;
6823 buf[dpi + 2] = dpi2;
6826 buf[dpi + 3] = dpi1;
6827 buf[dpi + 4] = dpi2;
6830 fwrite(buf, 1, 20, fp);
const Mask_t kGCClipXOrigin
const Mask_t kGCClipYOrigin
static const double x2[5]
static const double x1[5]
static const double x3[11]
static ARGB32 GetShadow(ARGB32 background)
Calculate shadow color.
static const UInt_t kBrushCacheSize
static CARD32 gBrushCache[kBrushCacheSize *kBrushCacheSize]
static unsigned long kAllPlanes
static ARGB32 GetAverage(ARGB32 foreground, ARGB32 background)
Get average.
static char * gIconPaths[7]
static int GetPolyYBounds(TPoint *pts, int n, int *by, int *ty)
Get poly bounds along Y.
static CARD8 MakeComponentHilite(int cmp)
Make component hilite.
static ARGB32 GetHilite(ARGB32 background)
Calculate highlite color.
static const UInt_t NUMPTSTOBUFFER
static ASFontManager * gFontManager
static void init_icon_paths()
Set icons paths.
#define _MEMSET_(dst, lng, val)
#define FillSpansInternal(npt, ppt, widths, color)
static ASDrawContext * create_draw_context_argb32(ASImage *im, ASDrawTool *brush)
Create draw context.
#define _alphaBlend(bot, top)
static void destroy_asdraw_context32(ASDrawContext *ctx)
Destroy asdraw context32.
struct _EdgeTableEntry EdgeTableEntry
struct _ScanLineListBlock ScanLineListBlock
struct _ScanLineList ScanLineList
#define EVALUATEEDGEEVENODD(pAET, pPrevAET, y)
static int InsertionSort(EdgeTableEntry *AET)
#define BRESINITPGON(dy, x1, x2, xStart, d, m, m1, incr1, incr2)
static void loadAET(EdgeTableEntry *AET, EdgeTableEntry *ETEs)
static void FreeStorage(ScanLineListBlock *pSLLBlock)
static void CreateETandAET(int count, TPoint *pts, EdgeTable *ET, EdgeTableEntry *AET, EdgeTableEntry *pETEs, ScanLineListBlock *pSLLBlock)
#define BRESINCRPGON(d, minval, m, m1, incr1, incr2)
include TDocParser_001 C image html pict1_TDocParser_001 png width
float type_of_call hi(const int &, const int &)
R__EXTERN TRandom * gRandom
char * Form(const char *fmt,...)
R__EXTERN TStyle * gStyle
R__EXTERN const char * gProgName
R__EXTERN TSystem * gSystem
R__EXTERN TVirtualPS * gVirtualPS
R__EXTERN Int_t(* gThreadXAR)(const char *xact, Int_t nb, void **ar, Int_t *iret)
void FillPolygon(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill a convex polygon with background color or bitmap.
Bool_t IsEditable() const
Bool_t SetJpegDpi(const char *name, UInt_t dpi=72)
Set an image printing resolution in Dots Per Inch units.
void DrawLineInternal(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Internal line drawing.
Pixmap_t GetPixmap()
Returns image pixmap.
Int_t fPaintMode
! 1 - fast mode, 0 - low memory slow mode
void CopyArea(TImage *dst, Int_t xsrc, Int_t ysrc, UInt_t w, UInt_t h, Int_t xdst=0, Int_t ydst=0, Int_t gfunc=3, EColorChan chan=kAllChan)
Copy source region to the destination image.
Bool_t SetImageBuffer(char **buffer, EImageFileTypes type=TImage::kPng)
Create image from compressed buffer.
Double_t fMinValue
! min value in image
UInt_t GetScaledWidth() const
Return width of the displayed image not of the original image.
void Merge(const TImage *im, const char *op="alphablend", Int_t x=0, Int_t y=0)
Merge two images.
void DrawHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t col, UInt_t thick)
Draw an horizontal line.
void FillSpans(UInt_t npt, TPoint *ppt, UInt_t *widths, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill spans with specified color or/and stipple.
static Bool_t fgInit
global flag to init afterimage only once
const char * TypeFromMagicNumber(const char *file)
Guess the file type from the first byte of file.
Double_t fMaxValue
! max value in image
void Append(const TImage *im, const char *option="+", const char *color="#00000000")
Append image.
void DrawCircle(Int_t x, Int_t y, Int_t r, const char *col="#000000", Int_t thick=1)
Draw a circle.
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, UInt_t *ic)
Draw a cell array.
void MapQuality(EImageQuality &quality, UInt_t &asquality, Bool_t toas=kTRUE)
Map quality to/from AfterImage quality.
void Crop(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Crop an image.
void CropSpans(UInt_t npt, TPoint *ppt, UInt_t *widths)
Crop spans.
TArrayL * GetPixels(Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Return 2D array of machine dependent pixel values.
UInt_t * GetScanline(UInt_t y)
Return a pointer to scan-line.
UInt_t fZoomWidth
! width of zoomed image in image pixels
Bool_t fEditable
! kTRUE image can be resized, moved by resizing/moving gPad
Int_t fZoomUpdate
! kZoom - new zooming required, kZoomOps - other ops in action, kNoZoom - no zooming or ops
void EndPaint()
EndPaint does internal RLE compression of image data.
void DrawVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t col, UInt_t thick)
Draw a vertical line.
UInt_t GetWidth() const
Return width of original image not of the displayed image.
void Gradient(UInt_t angle=0, const char *colors="#FFFFFF #000000", const char *offsets=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Render multipoint gradient inside rectangle of size (width, height) at position (x,...
void DrawStraightEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, const char *col="#000000", Int_t thick=1)
Draw a straight ellipse.
void DrawText(Int_t x=0, Int_t y=0, const char *text="", Int_t size=12, const char *color=0, const char *font="fixed", EText3DType type=TImage::kPlain, const char *fore_file=0, Float_t angle=0)
Draw text of size (in pixels for TrueType fonts) at position (x, y) with color specified by hex strin...
ASImage * fImage
! pointer to image structure of original image
UInt_t GetHeight() const
Return height of original image not of the displayed image.
UInt_t fZoomHeight
! hight of zoomed image in image pixels
static THashTable * fgPlugList
! hash table containing loaded plugins
Int_t Idx(Int_t idx)
Return a valid index in fImage tables to avoid seg-fault by accessing out of indices out of array's r...
void DrawSegments(UInt_t nseg, Segment_t *seg, const char *col="#000000", UInt_t thick=1)
Draw segments.
void DrawPolyLine(UInt_t nn, TPoint *xy, const char *col="#000000", UInt_t thick=1, TImage::ECoordMode mode=kCoordModeOrigin)
Draw a polyline.
void SetDefaults()
Set default parameters.
void DrawWideLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Draw wide line.
void CropPolygon(UInt_t npt, TPoint *ppt)
Crop a convex polygon.
void StartPaletteEditor()
Start palette editor.
void Bevel(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0, const char *hi="#ffdddddd", const char *lo="#ff555555", UShort_t thick=1, Bool_t pressed=kFALSE)
Bevel is used to create 3D effect while drawing buttons, or any other image that needs to be framed.
void SavePrimitive(std::ostream &out, Option_t *option="")
Save a primitive as a C++ statement(s) on output stream "out".
UInt_t * GetRgbaArray()
Return a pointer to an array[width x height] of RGBA32 values.
void PolyPoint(UInt_t npt, TPoint *ppt, const char *col="#000000", TImage::ECoordMode mode=kCoordModeOrigin)
Draw a poly point.
Pixmap_t GetMask()
Returns image mask pixmap (alpha channel).
static const ASVisual * GetVisual()
Return visual.
const char * GetTitle() const
Title is used to keep 32x32 xpm image's thumbnail.
void PaintImage(Drawable_t wid, Int_t x, Int_t y, Int_t xsrc=0, Int_t ysrc=0, UInt_t wsrc=0, UInt_t hsrc=0, Option_t *opt="")
Draw image on the drawable wid (pixmap, window) at x,y position.
void SetPaletteEnabled(Bool_t on=kTRUE)
Switch on/off the image palette.
static void Image2Drawable(ASImage *im, Drawable_t wid, Int_t x, Int_t y, Int_t xsrc=0, Int_t ysrc=0, UInt_t wsrc=0, UInt_t hsrc=0, Option_t *opt="")
Draw asimage on drawable.
void Zoom(UInt_t offX, UInt_t offY, UInt_t width, UInt_t height)
The area of an image displayed in a pad is defined by this function.
void FillRectangleInternal(UInt_t col, Int_t x, Int_t y, UInt_t width, UInt_t height)
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
void DrawDashLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, const char *col="#000000", UInt_t thick=1)
Draw a dashed line.
void DrawGlyph(void *bitmap, UInt_t color, Int_t x, Int_t y)
Draw glyph bitmap.
TASImage * fScaledImage
! temporary scaled and zoomed image produced from original image
void FillRectangle(const char *col=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
void DrawLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, const char *col="#000000", UInt_t thick=1)
Draw a line.
UInt_t fZoomOffX
! X - offset for zooming in image pixels
void FromWindow(Drawable_t wid, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Create an image (screenshot) from specified window.
void DrawFillArea(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=0, UInt_t w=16, UInt_t h=16)
Fill a polygon (any type convex, non-convex).
void GetImageBuffer(char **buffer, int *size, EImageFileTypes type=TImage::kPng)
Return in-memory buffer compressed according image type.
Int_t DistancetoPrimitive(Int_t px, Int_t py)
Is the mouse in the image ?
EImageFileTypes GetFileType(const char *ext)
Return file type depending on specified extension.
void Browse(TBrowser *)
Browse image.
void Gray(Bool_t on=kTRUE)
Convert RGB image to Gray image and vice versa.
void Tile(UInt_t width, UInt_t height)
Tile the original image.
void Draw(Option_t *option="")
Draw image.
void WriteImage(const char *file, EImageFileTypes type=TImage::kUnknown)
Write image to specified file.
char * GetObjectInfo(Int_t px, Int_t py) const
Get image pixel coordinates and the pixel value at the mouse pointer.
static UInt_t AlphaBlend(UInt_t bot, UInt_t top)
Return alpha-blended value computed from bottom and top pixel values.
void DrawTextTTF(Int_t x, Int_t y, const char *text, Int_t size, UInt_t color, const char *font_name, Float_t angle)
Draw text using TrueType fonts.
void ReadImage(const char *file, EImageFileTypes type=TImage::kUnknown)
Read specified image file.
void BeginPaint(Bool_t fast=kTRUE)
BeginPaint initializes internal array[width x height] of ARGB32 pixel values.
void DrawDashZTLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed line with thick pixel width.
void DestroyImage()
Destroy image.
void DrawEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, Int_t angle, const char *col="#000000", Int_t thick=1)
Draw an ellipse.
static Bool_t InitVisual()
Static function to initialize the ASVisual.
void FloodFill(Int_t x, Int_t y, const char *col, const char *min_col, const char *max_col=0)
Flood fill.
UInt_t fZoomOffY
! Y - offset for zooming im image pixels
Double_t * Vectorize(UInt_t max_colors=256, UInt_t dither=4, Int_t opaque_threshold=1)
Reduce color-depth of an image and fills vector of "scientific data" [0...1].
void HSV(UInt_t hue=0, UInt_t radius=360, Int_t H=0, Int_t S=0, Int_t V=0, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0)
This function will tile original image to specified size with offsets requested, and then it will go ...
void Slice(UInt_t xStart, UInt_t xEnd, UInt_t yStart, UInt_t yEnd, UInt_t toWidth, UInt_t toHeight)
Another method of enlarging images where corners remain unchanged, but middle part gets tiled.
void Scale(UInt_t width, UInt_t height)
Scale the original image.
void Mirror(Bool_t vert=kTRUE)
Mirror image in place.
void DrawEllips2(Int_t x, Int_t y, Int_t rx, Int_t ry, Int_t angle, const char *col="#000000", Int_t thick=1)
Draw an ellipse.
TArrayD * GetArray(UInt_t w=0, UInt_t h=0, TImagePalette *pal=gWebImagePalette)
In case of vectorized image return an associated array of doubles otherwise this method creates and r...
ASImage * fGrayImage
! gray image
void DrawDashVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed vertical line.
UInt_t * GetArgbArray()
Return a pointer to internal array[width x height] of ARGB32 values This array is directly accessible...
void MapFileTypes(EImageFileTypes &type, UInt_t &astype, Bool_t toas=kTRUE)
Map file type to/from AfterImage types.
void DrawDashHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t nDash, const char *pDash, UInt_t col, UInt_t thick)
Draw a dashed horizontal line.
void PutPixel(Int_t x, Int_t y, const char *col="#000000")
Draw a point at the specified position.
void UnZoom()
Un-zoom the image to original size.
void SetPalette(const TImagePalette *palette)
Set a new palette to an image.
TASImage()
Default image constructor.
TASImage & operator=(const TASImage &img)
Image assignment operator.
void DrawCubeBezier(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t x3, Int_t y3, const char *col="#000000", UInt_t thick=1)
Draw a cubic bezier line.
Double_t * GetVecArray()
Return a pointer to internal array[width x height] of double values [0,1].
void DrawDashZLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t nDash, const char *pDash, UInt_t col)
Draw a dashed line with one pixel width.
void Paint(Option_t *option="")
Paint image.
void Flip(Int_t flip=180)
Flip image in place.
void FromGLBuffer(UChar_t *buf, UInt_t w, UInt_t h)
Creates an image (screenshot) from a RGBA buffer.
void FromPad(TVirtualPad *pad, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0)
Create an image from the given pad, afterwards this image can be saved in any of the supported image ...
Bool_t GetPolygonSpans(UInt_t npt, TPoint *ppt, UInt_t *nspans, TPoint **firstPoint, UInt_t **firstWidth)
The code is based on Xserver/mi/mipolycon.c "Copyright 1987, 1998 The Open Group".
void DrawRectangle(UInt_t x, UInt_t y, UInt_t w, UInt_t h, const char *col="#000000", UInt_t thick=1)
Draw a rectangle.
void ExecuteEvent(Int_t event, Int_t px, Int_t py)
Execute mouse events.
void Pad(const char *color="#00FFFFFF", UInt_t left=0, UInt_t right=0, UInt_t top=0, UInt_t bottom=0)
Enlarge image, padding it with specified color on each side in accordance with requested geometry.
static ASVisual * fgVisual
pointer to visual structure
virtual ~TASImage()
Image destructor, clean up image and visual.
void GetZoomPosition(UInt_t &x, UInt_t &y, UInt_t &w, UInt_t &h) const
Return the zoom parameters.
TObject * Clone(const char *newname) const
Clone image.
void Blur(Double_t hr=3, Double_t vr=3)
Perform Gaussian blur of the image (useful for drop shadows).
UInt_t GetScaledHeight() const
Return height of the displayed image not of the original image.
void SetImage(const Double_t *imageData, UInt_t width, UInt_t height, TImagePalette *palette=0)
Deletes the old image and creates a new image depending on the values of imageData.
void DrawBox(Int_t x1, Int_t y1, Int_t x2, Int_t y2, const char *col="#000000", UInt_t thick=1, Int_t mode=0)
Draw a box.
void SetTitle(const char *title="")
Set a title for an image.
Bool_t fIsGray
! kTRUE if image is gray
void CreateThumbnail()
Create image thumbnail.
Array of doubles (64 bits per element).
void AddAt(Double_t c, Int_t i)
Set the double c value at position i in the array.
const Double_t * GetArray() const
Array of longs (32 or 64 bits per element).
void AddAt(Long_t c, Int_t i)
Add long c at position i. Check for out of bounds.
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
virtual void SetFillStyle(Style_t fstyle)
Set the fill area style.
virtual void SetPalette(const TImagePalette *palette)
Set a new palette for the image.
Bool_t fConstRatio
keep aspect ratio of image on the screen
EImageQuality GetImageQuality() const
Bool_t GetConstRatio() const
virtual const TImagePalette & GetPalette() const
TImagePalette fPalette
color palette for value -> color conversion
UInt_t GetImageCompression() const
Bool_t fPaletteEnabled
! kTRUE - palette is drawn on the image
virtual void StartPaletteEditor()
Opens a GUI to edit the color palette.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
virtual Float_t GetTextSize() const
Return the text size.
virtual Short_t GetTextAlign() const
Return the text alignment.
virtual Font_t GetTextFont() const
Return the text font.
virtual Color_t GetTextColor() const
Return the text color.
virtual Float_t GetTextAngle() const
Return the text angle.
virtual void SetY2(Double_t y2)
virtual void SetX1(Double_t x1)
virtual void Draw(Option_t *option="")
Draw this box with its current attributes.
virtual void SetX2(Double_t x2)
virtual void SetY1(Double_t y1)
Using a TBrowser one can browse all ROOT objects.
Buffer base class used for serializing objects.
The color creation and management class.
static ULong_t RGB2Pixel(Int_t r, Int_t g, Int_t b)
Convert r,g,b to graphics system dependent pixel value.
const char * AsHexString() const
Return color as hexadecimal string.
virtual Int_t GetValue(const char *name, Int_t dflt) const
Returns the integer value for a resource.
virtual void Draw(Option_t *option="")
Draw this frame with its current attributes.
virtual void PaintAxis(Double_t xmin, Double_t ymin, Double_t xmax, Double_t ymax, Double_t &wmin, Double_t &wmax, Int_t &ndiv, Option_t *chopt="", Double_t gridlength=0, Bool_t drawGridOnly=kFALSE)
Control function to draw an axis.
THashTable implements a hash table to store TObject's.
void Add(TObject *obj)
Add object to the hash table.
TObject * FindObject(const char *name) const
Find object using its name.
A class to define a conversion from pixel values to pixel color.
UShort_t * fColorRed
[fNumPoints] red color at each anchor point
Double_t * fPoints
[fNumPoints] value of each anchor point [0..1]
virtual Int_t FindColor(UShort_t r, UShort_t g, UShort_t b)
Returns an index of the closest color.
UShort_t * fColorGreen
[fNumPoints] green color at each anchor point
UShort_t * fColorBlue
[fNumPoints] blue color at each anchor point
UInt_t fNumPoints
number of anchor points
UShort_t * fColorAlpha
[fNumPoints] alpha at each anchor point
virtual unsigned char * ReadFile(const char *filename, UInt_t &w, UInt_t &h)=0
An abstract interface to image processing library.
virtual UInt_t * GetArgbArray()
virtual UInt_t GetWidth() const
static TImage * Create()
Create an image.
TImage & operator=(const TImage &img)
virtual void Merge(const TImage *, const char *="alphablend", Int_t=0, Int_t=0)
virtual void BeginPaint(Bool_t=kTRUE)
virtual UInt_t GetHeight() const
virtual void SetName(const char *name)
Set the name of the TNamed.
virtual const char * GetTitle() const
Returns title of object.
virtual const char * GetName() const
Returns name of object.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
virtual void Delete(Option_t *option="")
Delete this object.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
virtual Bool_t InheritsFrom(const char *classname) const
Returns kTRUE if object inherits from class "classname".
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Long_t ExecPlugin(int nargs, const T &... params)
Int_t LoadPlugin()
Load the plugin library for this handler.
static const TString & GetTTFFontDir()
Get the fonts directory in the installation. Static utility function.
static const TString & GetIconPath()
Get the icon path in the installation. Static utility function.
virtual UInt_t Integer(UInt_t imax)
Returns a random integer uniformly distributed on the interval [ 0, imax-1 ].
void ToLower()
Change string to lower-case.
Int_t Atoi() const
Return integer value of string.
Bool_t EndsWith(const char *pat, ECaseCompare cmp=kExact) const
Return true if string ends with the specified string.
TSubString Strip(EStripType s=kTrailing, char c=' ') const
Return a substring of self stripped at beginning and/or end.
TString & Replace(Ssiz_t pos, Ssiz_t n, const char *s)
Ssiz_t First(char c) const
Find first occurrence of a character c.
const char * Data() const
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
TString & ReplaceAll(const TString &s1, const TString &s2)
Ssiz_t Last(char c) const
Find last occurrence of a character c.
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Bool_t BeginsWith(const char *s, ECaseCompare cmp=kExact) const
Int_t CountChar(Int_t c) const
Return number of times character c occurs in the string.
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Float_t GetScreenFactor() const
Float_t GetImageScaling() const
virtual Bool_t ExpandPathName(TString &path)
Expand a pathname getting rid of special shell characters like ~.
virtual const char * PrependPathName(const char *dir, TString &name)
Concatenate a directory and a file name.
virtual const char * BaseName(const char *pathname)
Base name of a file name. Base name of /user/root is root.
virtual void Sleep(UInt_t milliSec)
Sleep milliSec milli seconds.
virtual char * Which(const char *search, const char *file, EAccessMode mode=kFileExists)
Find location of file in a search path.
virtual const char * HomeDirectory(const char *userName=nullptr)
Return the user's home directory.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
TTF helper class containing glyphs description.
FT_Glyph fImage
glyph image
static Bool_t IsInitialized()
static void PrepareString(const char *string)
Put the characters in "string" in the "glyphs" array.
static void Init()
Initialise the TrueType fonts interface.
static void LayoutGlyphs()
Compute the glyphs positions, fgAscent and fgWidth (needed for alignment).
static void SetRotationMatrix(Float_t angle)
Set the rotation matrix used to rotate the font outlines.
static void SetTextFont(Font_t fontnumber)
Set specified font.
static TTGlyph * GetGlyphs()
static Int_t GetNumGlyphs()
static const FT_BBox & GetBox()
static void SetTextSize(Float_t textsize)
Set current text size.
static FT_Matrix * GetRotMatrix()
Base class for several text objects.
const void * GetWcsTitle(void) const
Returns the text as UNICODE.
Int_t GetNoElements() const
Element * GetMatrixArray()
TVirtualPS is an abstract interface to Postscript, PDF, SVG.
virtual void CellArrayEnd()=0
virtual void CellArrayFill(Int_t r, Int_t g, Int_t b)=0
virtual void CellArrayBegin(Int_t W, Int_t H, Double_t x1, Double_t x2, Double_t y1, Double_t y2)=0
virtual void * GetStream() const
virtual void Open(const char *filename, Int_t type=-111)=0
To make it possible to use GL for 2D graphic in a TPad/TCanvas.
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void Paint(Option_t *option="")=0
This method must be overridden if a class wants to paint itself.
virtual Int_t GetPixmapID() const =0
virtual Int_t VtoPixel(Double_t v) const =0
virtual const char * GetName() const =0
Returns name of object.
virtual Int_t UtoPixel(Double_t u) const =0
virtual Int_t GetCanvasID() const =0
virtual TCanvas * GetCanvas() const =0
virtual void SetBorderMode(Short_t bordermode)
RooArgSet S(const RooAbsArg &v1)
static constexpr double s
Int_t Nint(T x)
Round to nearest integer. Rounds half integers to the nearest even integer.
Short_t Max(Short_t a, Short_t b)
Double_t ATan2(Double_t y, Double_t x)
Short_t Min(Short_t a, Short_t b)
void flip(struct mesh *m, struct behavior *b, struct otri *flipedge)