64#include "RConfigure.h"
102# include "Windows4root.h"
106# define X_DISPLAY_MISSING 1
108# include <afterbase.h>
110# define X_DISPLAY_MISSING 1
111# include <afterbase.h>
113# include <afterimage.h>
132static char *
gIconPaths[7] = {
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr,
nullptr};
139#if defined(__GNUC__) && __GNUC__ >= 4 && ((__GNUC_MINOR__ == 2 && __GNUC_PATCHLEVEL__ >= 1) || (__GNUC_MINOR__ >= 3)) && !__INTEL_COMPILER
140#pragma GCC diagnostic ignored "-Wstrict-aliasing"
161#define _alphaBlend(bot, top) {\
162 __argb32__ *T = (__argb32__*)(top);\
163 __argb32__ *B = (__argb32__*)(bot);\
168 B->a = ((B->a*aa)>>8) + T->a;\
169 B->r = (B->r*aa + T->r*T->a)>>8;\
170 B->g = (B->g*aa + T->g*T->a)>>8;\
171 B->b = (B->b*aa + T->b*T->a)>>8;\
314 if (
img.fImage->alt.vector) {
335 if (
this != &
img &&
img.IsValid()) {
345 if (
img.fImage->alt.vector) {
393 const char *
delim =
":";
395 const char *
delim =
";";
414 const char *
ret =
"";
416 if (!fp)
return nullptr;
447 else if (
magic == 0x50)
498 Warning(
"ReadImage",
"Visual not initiated");
528 iparams.return_animation_delay = -1;
544 if (!
ext.IsNull() &&
ext.IsDigit()) {
562 unsigned char *
bitmap =
nullptr;
568 if (!handler || ((handler->
LoadPlugin() == -1))) {
666 Error(
"WriteImage",
"no image in memory. Draw something first");
670 if (!file || !*file) {
671 Error(
"WriteImage",
"no file name specified");
676 if ((s =
strrchr(file,
'.'))) {
680 Error(
"WriteImage",
"cannot determine a valid file type");
688 Error(
"WriteImage",
"not a valid file type was specified");
709 parms.xpm.dither = 4;
710 parms.xpm.opaque_threshold = 127;
711 parms.xpm.max_colors = 512;
726 parms.jpeg.flags = 0;
732 parms.gif.dither = 0;
733 parms.gif.opaque_threshold = 0;
739 parms.gif.dither = 0;
740 parms.gif.opaque_threshold = 0;
741 parms.gif.animate_repeats = 0;
755 parms.gif.animate_repeats = 0;
756 }
else if(
sufix==
"") {
762 }
else if(!
sufix.Contains(
"+")) {
774 parms.gif.animate_repeats = atoi(s);
784 parms.gif.animate_repeats = 0;
795 Error(
"WriteImage",
"gif suffix %s not yet supported", s);
806 Error(
"WriteImage",
"unexpected gif extension structure %s",
fname.Data());
814 parms.tiff.rows_per_strip = 0;
817 parms.tiff.jpeg_quality = 100;
818 parms.tiff.opaque_threshold = 0;
821 Error(
"WriteImage",
"file type %s not yet supported", s);
826 Error(
"WriteImage",
"error writing file %s", file);
844 if (s ==
"jpg" || s ==
"jpeg")
1006 Warning(
"SetImage",
"Visual not initiated");
1027 for (col = 0; col < 4; col++)
1044 for (col = 0; col < 4; col++)
1089 Error(
"FromPad",
"pad cannot be 0");
1094 Warning(
"FromPad",
"Visual not initiated");
1103 if (
gROOT->IsBatch()) {
1122 if (
itmp->fImage->alt.argb32) {
1150 if (
h == 0)
h =
pad->VtoPixel(0.);
1152 static int x11 = -1;
1153 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
1158 unsigned char *bits =
gVirtualX->GetColorBits(
wd, 0, 0,
w,
h);
1184 Error(
"Draw",
"no image set");
1200 rname.ReplaceAll(
".",
"");
1212 gPad->Range(-left / (1.0 - left - right),
1213 -bottom / (1.0 - top - bottom),
1214 1 + right / (1.0 - left - right),
1215 1 + top / ( 1.0 - top - bottom));
1216 gPad->RangeAxis(0, 0, 1, 1);
1242 static int x11 = -1;
1243 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
1257 char *bits =
new char[ww*
hh];
1266 for (
xx = 0;
xx < ww;
xx++) {
1284 (
const char *)bits, ww,
hh);
1293 gv.fClipXOrigin =
x;
1294 gv.fClipYOrigin =
y;
1302 if (x11 && (!
gPad ||
gPad->GetGLDevice() == -1)) {
1303 asimage2drawable(
fgVisual,
wid,
im, (GC)
gc,
xsrc,
ysrc,
x,
y,
wsrc,
hsrc, 1);
1306 unsigned char *bits = (
unsigned char *)
im->alt.argb32;
1311 bits = (
unsigned char *)
img->alt.argb32;
1318 if (
gPad &&
gPad->GetGLDevice() != -1) {
1324 if (!
option.Contains(
"opaque")) {
1380 Error(
"Paint",
"no image set");
1385 Warning(
"Paint",
"Visual not initiated");
1405 Error(
"Paint",
"tile option error");
1413 if (!
fImage->alt.vector) {
1431 Error(
"Paint",
"pad too small to display an image");
1444 (
gPad->UtoAbsPixel(
gPad->GetRightMargin()) / 10);
1447 (
gPad->UtoPixel(
gPad->GetRightMargin()) / 10);
1459 grad.npoints =
pal.fNumPoints;
1461 grad.color =
new ARGB32[grad.npoints];
1462 grad.offset =
new double[grad.npoints];
1477 delete [] grad.color;
1478 delete [] grad.offset;
1536 Error(
"Paint",
"image could not be rendered to display");
1543 auto ps =
gPad->GetPainter()->GetPS();
1562 min, max, ndiv,
"+LU");
1568 min, max, ndiv,
"+L");
1575 if (ps->InheritsFrom(
"TImageDump")) {
1579 gPad->XtoAbsPixel(0),
gPad->YtoAbsPixel(1));
1595 min, max, ndiv,
"+L");
1598 }
else if (ps->InheritsFrom(
"TPDF")) {
1599 Warning(
"Paint",
"PDF not implemented yet");
1601 }
else if (ps->InheritsFrom(
"TSVG")) {
1623 ps->SetFillStyle(1001);
1628 char *buffer =
nullptr;
1634 if (!params.png.compression)
1635 params.png.compression = -1;
1637 ps->CellArrayPng(buffer,
size);
1647 ps->CellArrayFill(
imdec->buffer.red[
xt],
1667 char *buffer =
nullptr;
1673 if (!params.png.compression)
1674 params.png.compression = -1;
1677 ps->CellArrayPng(buffer,
size);
1687 ps->CellArrayFill(
imdec->buffer.red[
xt],
1705 min, max, ndiv,
"+L");
1727 if (px1 < px2) {
pxl = px1;
pxt = px2;}
1728 else {
pxl = px2;
pxt = px1;}
1729 if (py1 < py2) {
pyl = py1;
pyt = py2;}
1730 else {
pyl = py2;
pyt = py1;}
1743 static std::unique_ptr<TBox>
ZoomBox;
1748 gPad->ExecuteEvent(event, px, py);
1778 px1 =
gPad->XtoAbsPixel(
gPad->GetX1());
1779 py1 =
gPad->YtoAbsPixel(
gPad->GetY1());
1780 px2 =
gPad->XtoAbsPixel(
gPad->GetX2());
1781 py2 =
gPad->YtoAbsPixel(
gPad->GetY2());
1854 static char info[64];
1860 px -=
gPad->XtoAbsPixel(0);
1861 py -=
gPad->YtoAbsPixel(1);
1864 if (px < 0 || py < 0)
return info;
1868 if (px >= (
int)
image->width || py >= (
int)
image->height)
1871 py =
image->height - 1 - py;
1878 if (
fImage->alt.vector) {
1898 Warning(
"SetPalette",
"Visual not initiated");
1903 Warning(
"SetPalette",
"Image not valid");
1932 for (
Int_t col = 0; col < 4; col++)
1950 Warning(
"Scale",
"Image not initiated");
1955 Warning(
"Scale",
"Visual not initiated");
1985 Warning(
"Slice",
"Image not initiated");
1990 Warning(
"Slice",
"Visual not initiated");
2020 Warning(
"Tile",
"Image not initiated");
2025 Warning(
"Tile",
"Visual not initiated");
2060 Warning(
"Zoom",
"Image not valid");
2082 Warning(
"UnZoom",
"Image not valid");
2109 Warning(
"Flip",
"Image not valid");
2113 Warning(
"Flip",
"Visual not initiated");
2117 if (
fImage->alt.vector) {
2118 Warning(
"Flip",
"flip does not work for data images");
2156 Warning(
"Mirror",
"Image not valid");
2161 Warning(
"Mirror",
"Visual not initiated");
2165 if (
fImage->alt.vector) {
2166 Warning(
"Mirror",
"mirror does not work for data images");
2289 if (!
fImage->alt.argb32) {
2293 if (!
fImage->alt.argb32) {
2306 Warning(
"StartPaletteEditor",
"Image not valid");
2309 if (!
fImage->alt.vector) {
2310 Warning(
"StartPaletteEditor",
"palette can be modified only for data images");
2325 Warning(
"GetPixmap",
"Visual not initiated");
2333 static int x11 = -1;
2334 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2340 if (!
fImage->alt.argb32) {
2359 Warning(
"GetMask",
"Visual not initiated");
2366 Warning(
"GetMask",
"No image");
2375 0, 0, ww, 0,
nullptr);
2379 std::vector<char> bits(ww *
hh / 8);
2410 Warning(
"SetImage",
"Visual not initiated");
2423 static int x11 = -1;
2424 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2453 Warning(
"GetPixels",
"Wrong Image");
2472 if ((
x >= (
int)
img->width) || (
y >= (
int)
img->height)) {
2476 if ((
int)(
x +
width) > (
int)
img->width) {
2485 img->width,
height,
nullptr)) ==
nullptr) {
2486 Warning(
"GetPixels",
"Failed to create image decoder");
2523 Warning(
"GetVecArray",
"Bad Image");
2526 if (
fImage->alt.vector) {
2527 return fImage->alt.vector;
2545 Warning(
"GetArray",
"Bad Image");
2551 if (
fImage->alt.vector) {
2568 img->width, 0,
nullptr)) ==
nullptr) {
2569 Warning(
"GetArray",
"Failed to create image decoder");
2578 for (
UInt_t k = 0; k <
h; k++) {
2581 for (
UInt_t i = 0; i <
w; ++i) {
2582 if ((
r ==
imdec->buffer.red[i]) &&
2583 (
g ==
imdec->buffer.green[i]) &&
2584 (
b ==
imdec->buffer.blue[i])) {
2586 r =
imdec->buffer.red[i];
2587 g =
imdec->buffer.green[i];
2588 b =
imdec->buffer.blue[i];
2592 ret->AddAt(
v, (
h-k-1)*
w + i);
2619 const char *color,
const char *font_name,
2636 if (
fn.Last(
'/') == 0)
2637 fn =
fn(1,
fn.Length() - 1);
2645 if (
fn.EndsWith(
".pfa") ||
fn.EndsWith(
".PFA") ||
fn.EndsWith(
".pfb") ||
fn.EndsWith(
".PFB") ||
fn.EndsWith(
".ttf") ||
fn.EndsWith(
".TTF") ||
fn.EndsWith(
".otf") ||
fn.EndsWith(
".OTF"))
2662 Warning(
"DrawText",
"cannot create Font Manager");
2671 Warning(
"DrawText",
"cannot find a font %s", font_name);
2715 layers[0].im =
rimg;
2716 layers[0].dst_x = 0;
2717 layers[0].dst_y = 0;
2718 layers[0].clip_width =
rimg->width;
2719 layers[0].clip_height =
rimg->height;
2720 layers[0].bevel =
nullptr;
2722 layers[1].dst_x =
x;
2723 layers[1].dst_y =
y;
2724 layers[1].clip_width =
fore_im->width;
2725 layers[1].clip_height =
fore_im->height;
2763 Warning(
"Merge",
"Visual not initiated");
2772 layers[0].dst_x = 0;
2773 layers[0].dst_y = 0;
2774 layers[0].clip_width =
fImage->width;
2775 layers[0].clip_height =
fImage->height;
2776 layers[0].bevel =
nullptr;
2778 layers[1].dst_x =
x;
2779 layers[1].dst_y =
y;
2780 layers[1].clip_width =
im->GetWidth();
2781 layers[1].clip_height =
im->GetHeight();
2800 Warning(
"Blur",
"Visual not initiated");
2808 Warning(
"Blur",
"Failed to create image");
2829 Warning(
"Clone",
"Image not initiated");
2836 Warning(
"Clone",
"Failed to create image");
2852 if (
fImage->alt.argb32) {
2875 Warning(
"Vectorize",
"Visual not initiated");
2883 Warning(
"Vectorize",
"Failed to create image");
2894 dither = dither > 7 ? 7 : dither;
2928 v = (
v>>12) & 0x0FFF;
2931 pal->fColorRed[
j] =
cmap.entries[
j].red << 8;
2932 pal->fColorGreen[
j] =
cmap.entries[
j].green << 8;
2933 pal->fColorBlue[
j] =
cmap.entries[
j].blue << 8;
2934 pal->fColorAlpha[
j] = 0xFF00;
2989 Warning(
"HSV",
"Visual not initiated");
2997 Warning(
"HSV",
"Failed to create image");
3017 Warning(
"HSV",
"Failed to create rendered image");
3055 Warning(
"Gradient",
"Visual not initiated");
3069 if ((
angle > 2 * 180 * 15 / 16) || (
angle < 2 * 180 * 1 / 16)) {
3071 }
else if (
angle < 2 * 180 * 3 / 16) {
3073 }
else if (
angle < 2 * 180 * 5 / 16) {
3075 }
else if (
angle < 2 * 180 * 7 / 16) {
3077 }
else if (
angle < 2 * 180 * 9 / 16) {
3079 }
else if (
angle < 2 * 180 * 11 / 16) {
3081 }
else if (
angle < 2 * 180 * 13 / 16) {
3096 for (
p = (
char*)offsets;
isspace((
int)*
p);
p++) { }
3117 gradient.offset =
new double[
npoints1];
3134 Warning(
"Gradient",
"Failed to parse color [%s] - defaulting to black",
pb);
3139 for (
p = (
char*)offsets;
isspace((
int)*
p);
p++) { }
3165 for (i = 0; i < gradient.npoints/2; i++) {
3166 int i2 = gradient.npoints - 1 - i;
3168 double o = gradient.offset[i];
3169 gradient.color[i] = gradient.color[
i2];
3170 gradient.color[
i2] =
c;
3171 gradient.offset[i] = gradient.offset[
i2];
3172 gradient.offset[
i2] = o;
3174 for (i = 0; i < gradient.npoints; i++) {
3175 gradient.offset[i] = 1.0 - gradient.offset[i];
3181 delete [] gradient.color;
3182 delete [] gradient.offset;
3186 Warning(
"Gradient",
"Failed to create gradient image");
3199 layers[0].dst_x = 0;
3200 layers[0].dst_y = 0;
3201 layers[0].clip_width =
fImage->width;
3202 layers[0].clip_height =
fImage->height;
3203 layers[0].bevel =
nullptr;
3205 layers[1].dst_x =
x;
3206 layers[1].dst_y =
y;
3207 layers[1].clip_width =
width;
3208 layers[1].clip_height =
height;
3214 Warning(
"Gradient",
"Failed to create merged image");
3233 cmp = (cmp * 12) / 10;
3235 return (cmp > 255) ? 255 : cmp;
3296 Warning(
"Bevel",
"Visual not initiated");
3310 bevel.hi_color = lo;
3315 bevel.lo_color = lo;
3324 if (
bevel.top_outline > 1) {
3328 if (
bevel.left_outline > 1) {
3332 if (
bevel.right_outline > 1) {
3333 bevel.right_inline +=
bevel.right_outline - 1;
3336 if (
bevel.bottom_outline > 1) {
3337 bevel.bottom_inline +=
bevel.bottom_outline - 1;
3341 ARGB32 fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ?
bevel.hilo_color : (
bevel.hilo_color | 0xff000000);
3347 Warning(
"Bevel",
"Failed to create image");
3363 layers[0].dst_x = 0;
3364 layers[0].dst_y = 0;
3365 layers[0].clip_width =
fImage->width;
3366 layers[0].clip_height =
fImage->height;
3367 layers[0].bevel =
nullptr;
3374 Warning(
"Bevel",
"Failed to create bevel image");
3381 layers[1].dst_x =
x;
3382 layers[1].dst_y =
y;
3383 layers[1].clip_width =
width;
3384 layers[1].clip_height =
height;
3385 layers[1].bevel = &
bevel;
3393 Warning(
"Bevel",
"Failed to image");
3413 Warning(
"Pad",
"Visual not initiated");
3421 Warning(
"Pad",
"Failed to create image");
3440 Warning(
"Pad",
"Failed to create output image");
3457 Warning(
"Crop",
"Visual not initiated");
3473 Warning(
"Crop",
"input size larger than image");
3480 Warning(
"Crop",
"Failed to start image decoding");
3488 Warning(
"Crop",
"Failed to create image");
3496 Warning(
"Crop",
"Failed to start image output");
3536 Warning(
"Append",
"Visual not initiated");
3552 Pad(color, 0,
im->GetWidth(), 0, 0);
3554 }
else if (opt ==
"/") {
3555 Pad(color, 0, 0, 0,
im->GetHeight());
3575 Warning(
"BeginPaint",
"Visual not initiated");
3593 Warning(
"BeginPaint",
"Failed to create image");
3607 Warning(
"EndPaint",
"no image");
3611 if (!
fImage->alt.argb32)
return;
3617 Warning(
"EndPaint",
"Failed to create image");
3634 Warning(
"GetArgbArray",
"no image");
3639 if (!
img)
return nullptr;
3641 if (!
img->alt.argb32) {
3662 Warning(
"GetRgbaArray",
"no image");
3667 if (!
img)
return nullptr;
3669 if (!
img->alt.argb32) {
3686 for (i = 0; i <
img->height; i++) {
3687 for (
j = 0;
j <
img->width;
j++) {
3707 Warning(
"GetScanline",
"no image");
3715 0,
y,
img->width, 1,
nullptr);
3719 Warning(
"GetScanline",
"Failed to start image decoding");
3744#if defined(R__GNU) && defined(__i386__) && !defined(__sun)
3745#define _MEMSET_(dst, lng, val) __asm__("movl %0,%%eax \n"\
3746 "movl %1,%%edi \n" \
3747 "movl %2,%%ecx \n" \
3752 :"g" (val), "g" (dst), "g" (lng) \
3753 :"eax","edi","ecx" \
3757 #define _MEMSET_(dst, lng, val) do {\
3758 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0)
3762#define FillSpansInternal(npt, ppt, widths, color) do {\
3763 UInt_t yy = ppt[0].fY*fImage->width;\
3764 for (UInt_t i = 0; i < npt; i++) {\
3765 _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\
3766 yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\
3777 if (!
InitImage(
"FillRectangleInternal")) {
3803 if (!
fImage->alt.argb32) {
3840 Warning(
"FillRectangle",
"Visual not initiated");
3972 if (!
dx && !
dy)
return;
4102 Warning(
"DrawRectangle",
"Visual not initiated");
4114 if (!
fImage->alt.argb32) {
4118 if (!
fImage->alt.argb32) {
4119 Warning(
"DrawRectangle",
"Failed to get argb32 pixel array");
4355 if ((
iDash%2) == 0) {
4379 if ((
iDash%2) == 0) {
4433 if ((
iDash%2) == 0) {
4459 if ((
iDash%2) == 0) {
4550 if ((
iDash%2) == 0) {
4569 if ((
iDash%2) == 0) {
4609 if ((
iDash%2) == 0) {
4628 if ((
iDash%2) == 0) {
4669 }
else if (
y1 ==
y2) {
4714 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4715 Warning(
"PutPixel",
"Out of range width=%d x=%d, height=%d y=%d",
4732 Warning(
"PolyPoint",
"No points specified");
4745 for (i = 0; i <
npt; i++) {
4752 for (i = 0; i <
npt; i++) {
4756 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4773 Warning(
"DrawSegments",
"Invalid data nseg=%d seg=0x%zx",
nseg, (
size_t)
seg);
4780 pt[0].fX =
seg->fX1;
4781 pt[1].fX =
seg->fX2;
4782 pt[0].fY =
seg->fY1;
4783 pt[1].fY =
seg->fY2;
4801 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx col=%s widths=0x%zx stipple=0x%zx w=%d h=%d",
4844 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx widths=0x%zx tile=0x%zx",
4883 Warning(
"CropSpans",
"No points specified npt=%d ppt=0x%zx widths=0x%zx",
npt, (
size_t)
ppt, (
size_t)
widths);
4899 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4904 for (i = 0; i <
npt; i++) {
4907 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4911 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4919 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4953 Warning(
"CopyArea",
"Visual not initiated");
4958 Warning(
"CopyArea",
"no image");
4978 if (!
fImage->alt.argb32) {
4981 if (!out->alt.argb32) {
4986 if (
fImage->alt.argb32 && out->alt.argb32) {
4987 for (
y = 0;
y < (
int)
h;
y++) {
4988 for (
x = 0;
x < (
int)
w;
x++) {
4991 (
x +
xdst >= (
int)out->width) || (
y +
ydst >= (
int)out->height) )
continue;
4997 out->alt.argb32[
idx2] = 0;
5000 out->alt.argb32[
idx2] &=
fImage->alt.argb32[idx];
5006 out->alt.argb32[
idx2] &=
~fImage->alt.argb32[idx];
5011 out->alt.argb32[
idx2] ^=
fImage->alt.argb32[idx];
5014 out->alt.argb32[
idx2] |=
fImage->alt.argb32[idx];
5017 out->alt.argb32[
idx2] = (
~fImage->alt.argb32[idx]) & (~out->alt.argb32[
idx2]);
5020 out->alt.argb32[
idx2] ^=
~fImage->alt.argb32[idx];
5032 out->alt.argb32[
idx2] |=
~fImage->alt.argb32[idx];
5035 out->alt.argb32[
idx2] = (
~fImage->alt.argb32[idx]) | (~out->alt.argb32[
idx2]);
5038 out->alt.argb32[
idx2] = 0xFFFFFFFF;
5042 out->alt.argb32[
idx2] =
fImage->alt.argb32[idx];
5066 int i,
j, ix, iy,
w,
h;
5068 ARGB32 color = 0xFFFFFFFF;
5075 for (i = 0; i <
nx; i++) {
5077 for (
j = 0;
j <
ny;
j++) {
5079 if (
icol != color) {
5149 int mr = 0,
m1r = 0;
5173 Warning(
"GetPolygonSpans",
"No points specified npt=%d ppt=0x%zx",
npt, (
size_t)
ppt);
5257 }
while (
y !=
ymax);
5282 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5359 if ((count < 3) || !
ptsIn) {
5360 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)
ptsIn);
5399 ET.scanlines.next =
nullptr;
5400 ET.ymin =
ET.ymax = 0;
5405 pSLL =
ET.scanlines.next;
5407 for (
y =
ET.ymin;
y <
ET.ymax;
y++) {
5421 *
width++ =
pAET->next->bres.minor_axis -
pAET->bres.minor_axis;
5424 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5440 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5460 if ((count < 3) || !
ptsIn) {
5461 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)
ptsIn);
5487 ET.scanlines.next =
nullptr;
5488 ET.ymin =
ET.ymax = 0;
5493 pSLL =
ET.scanlines.next;
5495 for (
y =
ET.ymin;
y <
ET.ymax;
y++) {
5509 *
width++ =
pAET->next->bres.minor_axis -
pAET->bres.minor_axis;
5535 ctx->canvas_width =
im->width;
5536 ctx->canvas_height =
im->height;
5537 ctx->canvas =
im->alt.argb32;
5538 ctx->scratch_canvas =
nullptr;
5551 if (ctx->scratch_canvas)
free(ctx->scratch_canvas);
5578 for (
int i = 0; i <
sz; i++) {
5633 r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
5634 g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
5635 b += (
fImage->alt.argb32[idx] & 0x0000ff);
5645 col[0] = (
r << 16) + (
g << 8) +
b;
5682 d = ((
d + 10) * 5) >> 8;
5723 ttf.SetTextFont(
text->GetTextFont());
5733 ttf.SetRotationMatrix(
text->GetTextAngle());
5736 const wchar_t *
wcsTitle =
reinterpret_cast<const wchar_t *
>(
text->GetWcsTitle());
5740 ttf.PrepareString(
text->GetTitle());
5804 if (align == 1 || align == 2 || align == 3) {
5806 }
else if (align == 4 || align == 5 || align == 6) {
5813 if (align == 3 || align == 6 || align == 9) {
5815 }
else if (align == 2 || align == 5 || align == 8) {
5846 ttf.SetTextFont(font_name);
5934 params.gamma_table =
nullptr;
5935 params.compression = 0;
5937 params.search_path =
nullptr;
5938 params.subimage = 0;
5943 char *ptr = buffer[0];
5944 while (
isspace((
int)*ptr)) ++ptr;
5979 Warning(
"CreateThumbnail",
"No image");
5984 Warning(
"CreateThumbnail",
"Visual not initiated");
5988 static char *buf =
nullptr;
6014 layers[0].dst_x = 0;
6015 layers[0].dst_y = 0;
6016 layers[0].clip_width =
img->width;
6017 layers[0].clip_height =
img->height;
6018 layers[0].bevel =
nullptr;
6020 layers[1].dst_x = 0;
6021 layers[1].dst_y = 0;
6022 layers[1].clip_width =
img->width;
6023 layers[1].clip_height =
img->height;
6066 if (
b.IsReading()) {
6103 char *buffer =
new char[
size];
6104 b.ReadFastArray(buffer,
size);
6133 char *buffer =
nullptr;
6136 b.WriteFastArray(buffer,
size);
6153 if (
fImage->alt.vector) {
6194 if ((start > 0) && (stop - start > 0)) {
6221 for (
int i = 0; i <
sz; i++) {
6264 for (
int i = 0; i <
sz; i++) {
6308 for (
int i = 0; i <
sz; i++) {
6351 for (
int i = 0; i <
sz; i++) {
6394 for (
int i = 0; i <
sz; i++) {
6417 const char * ,
const char * )
6431 Warning(
"Gray",
"Image not initiated");
6436 Warning(
"Gray",
"Visual not initiated");
6460 if (
fImage->alt.argb32) {
6464 for (i = 0; i <
fImage->height; i++) {
6468 r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
6469 g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
6470 b = (
fImage->alt.argb32[idx] & 0x0000ff);
6471 l = (57*
r + 181*
g + 18*
b)/256;
6491 Warning(
"ToGray",
"Failed to start image output");
6505 for (i = 0; i <
fImage->height; i++) {
6561 Warning(
"FromWindow",
"Visual not initiated");
6568 static int x11 = -1;
6569 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
6593 for (
UInt_t i = 0; i <
h/2; ++i) {
6624 gPad->Range(-left / (1.0 - left - right),
6625 -bottom / (1.0 - top - bottom),
6626 1 + right / (1.0 - left - right),
6627 1 + top / ( 1.0 - top - bottom));
6628 gPad->RangeAxis(0, 0, 1, 1);
6638 char *buf =
nullptr;
6644 str.ReplaceAll(
"static",
"const");
6648 str.ReplaceAll(
"asxpm",
xpm.Data());
6649 out <<
"\n" << str <<
"\n\n";
6654 out <<
"asimage = TImage::Create();\n";
6655 out <<
" asimage->SetImageBuffer( (char **)" <<
xpm <<
", TImage::kXpm);\n";
6657 out <<
" asimage->Draw();\n";
6670 static char buf[32];
6678 if (!
fread(buf, 1, 20, fp)) {
6683 char dpi1 = (set & 0xffff) >> 8;
6684 char dpi2 = set & 0xff;
6689 for (i = 0; i < 20; i++) {
6690 if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) && (buf[i+2] == 0x49) &&
6691 (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
6697 if (i == 20 ||
dpi+4 >= 20) {
6699 printf(
"file %s : wrong JPEG format\n",
name);
6714 fwrite(buf, 1, 20, fp);
Handle_t Pixmap_t
Pixmap handle.
const Mask_t kGCClipXOrigin
Handle_t Window_t
Window handle.
@ kGXorReverse
src OR NOT dst
@ kGXnand
NOT src OR NOT dst.
@ kGXandReverse
src AND NOT dst
@ kGXorInverted
NOT src OR dst.
@ kGXandInverted
NOT src AND dst.
@ kGXequiv
NOT src XOR dst.
@ kGXnor
NOT src AND NOT dst.
@ kGXcopyInverted
NOT src.
Handle_t GContext_t
Graphics context handle.
Handle_t Drawable_t
Drawable handle.
const Mask_t kGCClipYOrigin
size_t size(const MatrixT &matrix)
retrieve the size of a square matrix
bool Bool_t
Boolean (0=false, 1=true) (bool)
unsigned short UShort_t
Unsigned Short integer 2 bytes (unsigned short)
int Int_t
Signed integer 4 bytes (int)
short Version_t
Class version identifier (short)
unsigned char UChar_t
Unsigned Character 1 byte (unsigned char)
int Ssiz_t
String size (currently int)
unsigned long ULong_t
Unsigned long integer 4 bytes (unsigned long). Size depends on architecture.
long Long_t
Signed long integer 4 bytes (long). Size depends on architecture.
unsigned int UInt_t
Unsigned integer 4 bytes (unsigned int)
float Float_t
Float 4 bytes (float)
double Double_t
Double 8 bytes.
constexpr Ssiz_t kNPOS
The equivalent of std::string::npos for the ROOT class TString.
const char Option_t
Option string (const char)
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.
#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)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
winID h TVirtualViewer3D TVirtualGLPainter p
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t mask
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void cmap
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char filename
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t del
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pixel
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize wid
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t r
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t result
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void on
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void foreground
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char FillPolygon
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char bitmap
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
Option_t Option_t TPoint TPoint angle
Option_t Option_t TPoint xy
Option_t Option_t TPoint TPoint const char mode
Option_t Option_t TPoint TPoint const char y2
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t FillRectangle
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t type
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void pxm
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t height
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void gc
Option_t Option_t TPoint TPoint const char text
Option_t Option_t TPoint TPoint const char y1
R__EXTERN TRandom * gRandom
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 CropSpans(UInt_t npt, TPoint *ppt, UInt_t *widths) override
Crop spans.
void Gradient(UInt_t angle=0, const char *colors="#FFFFFF #000000", const char *offsets=nullptr, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Render multipoint gradient inside rectangle of size (width, height) at position (x,...
void Blur(Double_t hr=3, Double_t vr=3) override
Perform Gaussian blur of the image (useful for drop shadows).
Bool_t SetJpegDpi(const char *name, UInt_t dpi=72)
Set an image printing resolution in Dots Per Inch units.
void StartPaletteEditor() override
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) override
Bevel is used to create 3D effect while drawing buttons, or any other image that needs to be framed.
void DrawLineInternal(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Internal line drawing.
Int_t fPaintMode
! 1 - fast mode, 0 - low memory slow mode
static Bool_t fgBatch
global flag to signal if batch mode is active ie fgVisual->dpy was set to nullptr
UInt_t GetWidth() const override
Return width of original image not of the displayed image.
Double_t fMinValue
! min value in image
UInt_t GetScaledWidth() const
Return width of the displayed image not of the original 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) override
Draw an ellipse.
void Paint(Option_t *option="") override
Paint image.
void DrawHLine(UInt_t y, UInt_t x1, UInt_t x2, UInt_t col, UInt_t thick)
Draw an horizontal line.
void SetPaletteEnabled(Bool_t on=kTRUE) override
Switch on/off the image palette.
Bool_t InitImage(const char *caller)
Static function to initialize the image.
static Bool_t fgInit
global flag to init afterimage only once
const char * GetTitle() const override
Title is used to keep 32x32 xpm image's thumbnail.
void FromGLBuffer(UChar_t *buf, UInt_t w, UInt_t h) override
Creates an image (screenshot) from a RGBA buffer.
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) override
This function will tile original image to specified size with offsets requested, and then it will go ...
void Tile(UInt_t width, UInt_t height) override
Tile the original image.
void WriteImage(const char *file, EImageFileTypes type=TImage::kUnknown) override
Write image to specified file.
Int_t DistancetoPrimitive(Int_t px, Int_t py) override
Is the mouse in the image ?
char * GetObjectInfo(Int_t px, Int_t py) const override
Get image pixel coordinates and the pixel value at the mouse pointer.
const char * TypeFromMagicNumber(const char *file)
Guess the file type from the first byte of file.
void DrawLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, const char *col="#000000", UInt_t thick=1) override
Draw a line.
Double_t fMaxValue
! max value in image
void MapQuality(EImageQuality &quality, UInt_t &asquality, Bool_t toas=kTRUE)
Map quality to/from AfterImage quality.
void Zoom(UInt_t offX, UInt_t offY, UInt_t width, UInt_t height) override
The area of an image displayed in a pad is defined by this function.
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
Bool_t IsValid() const override
TClass * IsA() const override
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) override
Draw a cubic bezier line.
void DrawFillArea(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill a polygon (any type convex, non-convex).
void DrawVLine(UInt_t x, UInt_t y1, UInt_t y2, UInt_t col, UInt_t thick)
Draw a vertical line.
UInt_t * GetRgbaArray() override
Return a pointer to an array[width x height] of RGBA32 values.
void FillRectangle(const char *col=nullptr, Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Fill rectangle of size (width, height) at position (x,y) within the existing image with specified col...
void DrawStraightEllips(Int_t x, Int_t y, Int_t rx, Int_t ry, const char *col="#000000", Int_t thick=1) override
Draw a straight ellipse.
Double_t * GetVecArray() override
Return a pointer to internal array[width x height] of double values [0,1].
void DrawCircle(Int_t x, Int_t y, Int_t r, const char *col="#000000", Int_t thick=1) override
Draw a circle.
ASImage * fImage
! pointer to image structure of original image
void Gray(Bool_t on=kTRUE) override
Convert RGB image to Gray image and vice versa.
void DrawText(Int_t x=0, Int_t y=0, const char *text="", Int_t size=12, const char *color=nullptr, const char *font="fixed", EText3DType type=TImage::kPlain, const char *fore_file=nullptr, Float_t angle=0) override
Draw text of size (in pixels for TrueType fonts) at position (x, y) with color specified by hex strin...
UInt_t fZoomHeight
! hight of zoomed image in image pixels
void Pad(const char *color="#00FFFFFF", UInt_t left=0, UInt_t right=0, UInt_t top=0, UInt_t bottom=0) override
Enlarge image, padding it with specified color on each side in accordance with requested geometry.
static THashTable * fgPlugList
! hash table containing loaded plugins
UInt_t * GetArgbArray() override
Return a pointer to internal array[width x height] of ARGB32 values This array is directly accessible...
Bool_t SetImageBuffer(char **buffer, EImageFileTypes type=TImage::kPng) override
Create image from compressed buffer.
Double_t * Vectorize(UInt_t max_colors=256, UInt_t dither=4, Int_t opaque_threshold=1) override
Reduce color-depth of an image and fills vector of "scientific data" [0...1].
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 FillPolygon(UInt_t npt, TPoint *ppt, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill a convex polygon with background color or bitmap.
void SetDefaults()
Set default parameters.
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) override
Copy source region to the destination image.
void DrawWideLine(UInt_t x1, UInt_t y1, UInt_t x2, UInt_t y2, UInt_t col, UInt_t thick)
Draw wide line.
Pixmap_t GetMask() override
Returns image mask pixmap (alpha channel).
UInt_t * GetScanline(UInt_t y) override
Return a pointer to scan-line.
void FillSpans(UInt_t npt, TPoint *ppt, UInt_t *widths, const char *col="#000000", const char *stipple=nullptr, UInt_t w=16, UInt_t h=16) override
Fill spans with specified color or/and stipple.
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) override
Draw an ellipse.
TObject * Clone(const char *newname="") const override
Clone image.
void Draw(Option_t *option="") override
Draw image.
void CropPolygon(UInt_t npt, TPoint *ppt) override
Crop a convex polygon.
static const ASVisual * GetVisual()
Return visual.
void DrawPolyLine(UInt_t nn, TPoint *xy, const char *col="#000000", UInt_t thick=1, TImage::ECoordMode mode=kCoordModeOrigin) override
Draw a polyline.
void PolyPoint(UInt_t npt, TPoint *ppt, const char *col="#000000", TImage::ECoordMode mode=kCoordModeOrigin) override
Draw a poly point.
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 Merge(const TImage *im, const char *op="alphablend", Int_t x=0, Int_t y=0) override
Merge two images.
void DrawCellArray(Int_t x1, Int_t y1, Int_t x2, Int_t y2, Int_t nx, Int_t ny, UInt_t *ic) override
Draw a cell array.
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...
~TASImage() override
Image destructor, clean up image and visual.
void FloodFill(Int_t x, Int_t y, const char *col, const char *min_col, const char *max_col=nullptr) override
Flood fill.
TASImage * fScaledImage
! temporary scaled and zoomed image produced from original image
Bool_t IsEditable() const override
void DrawFTGlyph(void *bitmap, UInt_t color, Int_t x, Int_t y, TVirtualPad *clippad=nullptr, Int_t offx=0, Int_t offy=0)
Draw glyph bitmap.
UInt_t fZoomOffX
! X - offset for zooming in image pixels
void ReadImage(const char *file, EImageFileTypes type=TImage::kUnknown) override
Read specified image file.
void GetImageBuffer(char **buffer, int *size, EImageFileTypes type=TImage::kPng) override
Return in-memory buffer compressed according image type.
EImageFileTypes GetFileType(const char *ext)
Return file type depending on specified extension.
void Slice(UInt_t xStart, UInt_t xEnd, UInt_t yStart, UInt_t yEnd, UInt_t toWidth, UInt_t toHeight) override
Another method of enlarging images where corners remain unchanged, but middle part gets tiled.
static UInt_t AlphaBlend(UInt_t bot, UInt_t top)
Return alpha-blended value computed from bottom and top pixel values.
void SetImage(const Double_t *imageData, UInt_t width, UInt_t height, TImagePalette *palette=nullptr) override
Deletes the old image and creates a new image depending on the values of imageData.
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 PutPixel(Int_t x, Int_t y, const char *col="#000000") override
Draw a point at the specified position.
void Browse(TBrowser *) override
Browse image.
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 DrawTextOnPad(TText *text, Int_t x=0, Int_t y=0, TVirtualPad *pad=nullptr, Int_t offx=0, Int_t offy=0) override
Draw text at the pixel position (x,y) checking clip on pad.
void DestroyImage()
Destroy image.
static Bool_t InitVisual()
Static function to initialize the ASVisual.
UInt_t fZoomOffY
! Y - offset for zooming im image pixels
void UnZoom() override
Un-zoom the image to original size.
void Streamer(TBuffer &) override
Streamer for ROOT I/O.
TArrayL * GetPixels(Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Return 2D array of machine dependent pixel values.
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="") override
Draw image on the drawable wid (pixmap, window) at x,y position.
void DestroyScaledImage()
Destroy scaled image.
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.
void SetTitle(const char *title="") override
Set a title for an image.
void MapFileTypes(EImageFileTypes &type, UInt_t &astype, Bool_t toas=kTRUE)
Map file type to/from AfterImage types.
void DrawRectangle(UInt_t x, UInt_t y, UInt_t w, UInt_t h, const char *col="#000000", UInt_t thick=1) override
Draw a rectangle.
void Append(const TImage *im, const char *option="+", const char *color="#00000000") override
Append image.
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 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) override
Draw a dashed line.
void SetPalette(const TImagePalette *palette) override
Set a new palette to an image.
void Scale(UInt_t width, UInt_t height) override
Scale the original image.
TASImage()
Default image constructor.
TASImage & operator=(const TASImage &img)
Image assignment operator.
void Mirror(Bool_t vert=kTRUE) override
Mirror image in place.
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 DrawSegments(UInt_t nseg, Segment_t *seg, const char *col="#000000", UInt_t thick=1) override
Draw segments.
Pixmap_t GetPixmap() override
Returns image pixmap.
void FromWindow(Drawable_t wid, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Create an image (screenshot) from specified window.
TArrayD * GetArray(UInt_t w=0, UInt_t h=0, TImagePalette *pal=gWebImagePalette) override
In case of vectorized image return an associated array of doubles otherwise this method creates and r...
void Flip(Int_t flip=180) override
Flip image in place.
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 Crop(Int_t x=0, Int_t y=0, UInt_t width=0, UInt_t height=0) override
Crop an image.
void EndPaint() override
EndPaint does internal RLE compression of image data.
void BeginPaint(Bool_t fast=kTRUE) override
BeginPaint initializes internal array[width x height] of ARGB32 pixel values.
static ASVisual * fgVisual
pointer to visual structure
void GetZoomPosition(UInt_t &x, UInt_t &y, UInt_t &w, UInt_t &h) const
Return the zoom parameters.
void SavePrimitive(std::ostream &out, Option_t *option="") override
Save a primitive as a C++ statement(s) on output stream "out".
UInt_t GetScaledHeight() const
Return height of the displayed image not of the original image.
void ExecuteEvent(Int_t event, Int_t px, Int_t py) override
Execute mouse events.
void FromPad(TVirtualPad *pad, Int_t x=0, Int_t y=0, UInt_t w=0, UInt_t h=0) override
Create an image from the given pad, afterwards this image can be saved in any of the supported image ...
UInt_t GetHeight() const override
Return height of original image not of the displayed image.
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) override
Draw a box.
Bool_t fIsGray
! kTRUE if image is gray
void CreateThumbnail()
Create image thumbnail.
Array of doubles (64 bits per element).
Array of longs (32 or 64 bits per element).
virtual void SetFillColor(Color_t fcolor)
Set the fill area color.
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
virtual void Streamer(TBuffer &)
UInt_t GetImageCompression() const
Bool_t fPaletteEnabled
! kTRUE - palette is drawn on the image
virtual void SaveImageAttributes(std::ostream &out, const char *name, EImageQuality qualdef=kImgPoor, UInt_t comprdef=0, Bool_t constRatiodef=kTRUE)
Save image attributes as C++ statement(s) on output stream, but not the palette.
virtual void StartPaletteEditor()
Opens a GUI to edit the color palette.
virtual void SetLineColor(Color_t lcolor)
Set the line color.
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.
static Int_t GetColor(const char *hexcolor)
Static method returning color number for color specified by hex color string of form: "#rrggbb",...
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.
void Draw(Option_t *option="") override
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.
Save canvas as an image (GIF, JPEG, PNG, XPM, TIFF etc.).
A class to define a conversion from pixel values to pixel color.
An abstract interface to image processing library.
void Streamer(TBuffer &) override
Stream an object of class TObject.
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)
const char * GetName() const override
Returns name of object.
void Streamer(TBuffer &) override
Stream an object of class TObject.
virtual void SetName(const char *name)
Set the name of the TNamed.
Mother of all ROOT objects.
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
void SetBit(UInt_t f, Bool_t set)
Set or unset the user status bits as specified in f.
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.
Longptr_t ExecPlugin(int nargs)
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.
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)
const char * Data() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
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 * FindFile(const char *search, TString &file, EAccessMode mode=kFileExists)
Find location of file in a search path.
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 const char * HomeDirectory(const char *userName=nullptr)
Return the user's home directory.
virtual Bool_t ProcessEvents()
Process pending events (GUI, timers, sockets).
Dynamic handle to work with freetype 2 library.
Base class for several text objects.
TVirtualPS is an abstract interface to Postscript, PDF, SVG.
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.
small helper class to store/restore gPad context in TPad methods
TVirtualPad is an abstract base class for the Pad and Canvas classes.
virtual void SetBorderMode(Short_t bordermode)
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)
Returns the largest of a and b.
Double_t ATan2(Double_t y, Double_t x)
Returns the principal value of the arc tangent of y/x, expressed in radians.
Short_t Min(Short_t a, Short_t b)
Returns the smallest of a and b.
Double_t Cos(Double_t)
Returns the cosine of an angle of x radians.
Double_t Sin(Double_t)
Returns the sine of an angle of x radians.
Short_t Abs(Short_t d)
Returns the absolute value of parameter Short_t d.
Graphics context structure.
Used for drawing line segments (maps to the X11 XSegments structure)