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(
"TSVG")) {
1620 ps->SetFillStyle(1001);
1625 char *buffer =
nullptr;
1631 if (!params.png.compression)
1632 params.png.compression = -1;
1634 ps->CellArrayPng(buffer,
size);
1644 ps->CellArrayFill(
imdec->buffer.red[
xt],
1664 char *buffer =
nullptr;
1670 if (!params.png.compression)
1671 params.png.compression = -1;
1674 ps->CellArrayPng(buffer,
size);
1684 ps->CellArrayFill(
imdec->buffer.red[
xt],
1702 min, max, ndiv,
"+L");
1724 if (px1 < px2) {
pxl = px1;
pxt = px2;}
1725 else {
pxl = px2;
pxt = px1;}
1726 if (py1 < py2) {
pyl = py1;
pyt = py2;}
1727 else {
pyl = py2;
pyt = py1;}
1740 static std::unique_ptr<TBox>
ZoomBox;
1745 gPad->ExecuteEvent(event, px, py);
1775 px1 =
gPad->XtoAbsPixel(
gPad->GetX1());
1776 py1 =
gPad->YtoAbsPixel(
gPad->GetY1());
1777 px2 =
gPad->XtoAbsPixel(
gPad->GetX2());
1778 py2 =
gPad->YtoAbsPixel(
gPad->GetY2());
1851 static char info[64];
1857 px -=
gPad->XtoAbsPixel(0);
1858 py -=
gPad->YtoAbsPixel(1);
1861 if (px < 0 || py < 0)
return info;
1865 if (px >= (
int)
image->width || py >= (
int)
image->height)
1868 py =
image->height - 1 - py;
1875 if (
fImage->alt.vector) {
1895 Warning(
"SetPalette",
"Visual not initiated");
1900 Warning(
"SetPalette",
"Image not valid");
1929 for (
Int_t col = 0; col < 4; col++)
1947 Warning(
"Scale",
"Image not initiated");
1952 Warning(
"Scale",
"Visual not initiated");
1982 Warning(
"Slice",
"Image not initiated");
1987 Warning(
"Slice",
"Visual not initiated");
2017 Warning(
"Tile",
"Image not initiated");
2022 Warning(
"Tile",
"Visual not initiated");
2057 Warning(
"Zoom",
"Image not valid");
2079 Warning(
"UnZoom",
"Image not valid");
2106 Warning(
"Flip",
"Image not valid");
2110 Warning(
"Flip",
"Visual not initiated");
2114 if (
fImage->alt.vector) {
2115 Warning(
"Flip",
"flip does not work for data images");
2153 Warning(
"Mirror",
"Image not valid");
2158 Warning(
"Mirror",
"Visual not initiated");
2162 if (
fImage->alt.vector) {
2163 Warning(
"Mirror",
"mirror does not work for data images");
2286 if (!
fImage->alt.argb32) {
2290 if (!
fImage->alt.argb32) {
2303 Warning(
"StartPaletteEditor",
"Image not valid");
2306 if (!
fImage->alt.vector) {
2307 Warning(
"StartPaletteEditor",
"palette can be modified only for data images");
2322 Warning(
"GetPixmap",
"Visual not initiated");
2330 static int x11 = -1;
2331 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2337 if (!
fImage->alt.argb32) {
2356 Warning(
"GetMask",
"Visual not initiated");
2363 Warning(
"GetMask",
"No image");
2372 0, 0, ww, 0,
nullptr);
2376 std::vector<char> bits(ww *
hh / 8);
2407 Warning(
"SetImage",
"Visual not initiated");
2420 static int x11 = -1;
2421 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
2450 Warning(
"GetPixels",
"Wrong Image");
2469 if ((
x >= (
int)
img->width) || (
y >= (
int)
img->height)) {
2473 if ((
int)(
x +
width) > (
int)
img->width) {
2482 img->width,
height,
nullptr)) ==
nullptr) {
2483 Warning(
"GetPixels",
"Failed to create image decoder");
2520 Warning(
"GetVecArray",
"Bad Image");
2523 if (
fImage->alt.vector) {
2524 return fImage->alt.vector;
2542 Warning(
"GetArray",
"Bad Image");
2548 if (
fImage->alt.vector) {
2565 img->width, 0,
nullptr)) ==
nullptr) {
2566 Warning(
"GetArray",
"Failed to create image decoder");
2575 for (
UInt_t k = 0; k <
h; k++) {
2578 for (
UInt_t i = 0; i <
w; ++i) {
2579 if ((
r ==
imdec->buffer.red[i]) &&
2580 (
g ==
imdec->buffer.green[i]) &&
2581 (
b ==
imdec->buffer.blue[i])) {
2583 r =
imdec->buffer.red[i];
2584 g =
imdec->buffer.green[i];
2585 b =
imdec->buffer.blue[i];
2589 ret->AddAt(
v, (
h-k-1)*
w + i);
2616 const char *color,
const char *font_name,
2633 if (
fn.Last(
'/') == 0)
2634 fn =
fn(1,
fn.Length() - 1);
2642 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"))
2659 Warning(
"DrawText",
"cannot create Font Manager");
2668 Warning(
"DrawText",
"cannot find a font %s", font_name);
2712 layers[0].im =
rimg;
2713 layers[0].dst_x = 0;
2714 layers[0].dst_y = 0;
2715 layers[0].clip_width =
rimg->width;
2716 layers[0].clip_height =
rimg->height;
2717 layers[0].bevel =
nullptr;
2719 layers[1].dst_x =
x;
2720 layers[1].dst_y =
y;
2721 layers[1].clip_width =
fore_im->width;
2722 layers[1].clip_height =
fore_im->height;
2760 Warning(
"Merge",
"Visual not initiated");
2769 layers[0].dst_x = 0;
2770 layers[0].dst_y = 0;
2771 layers[0].clip_width =
fImage->width;
2772 layers[0].clip_height =
fImage->height;
2773 layers[0].bevel =
nullptr;
2775 layers[1].dst_x =
x;
2776 layers[1].dst_y =
y;
2777 layers[1].clip_width =
im->GetWidth();
2778 layers[1].clip_height =
im->GetHeight();
2797 Warning(
"Blur",
"Visual not initiated");
2805 Warning(
"Blur",
"Failed to create image");
2826 Warning(
"Clone",
"Image not initiated");
2833 Warning(
"Clone",
"Failed to create image");
2849 if (
fImage->alt.argb32) {
2872 Warning(
"Vectorize",
"Visual not initiated");
2880 Warning(
"Vectorize",
"Failed to create image");
2891 dither = dither > 7 ? 7 : dither;
2925 v = (
v>>12) & 0x0FFF;
2928 pal->fColorRed[
j] =
cmap.entries[
j].red << 8;
2929 pal->fColorGreen[
j] =
cmap.entries[
j].green << 8;
2930 pal->fColorBlue[
j] =
cmap.entries[
j].blue << 8;
2931 pal->fColorAlpha[
j] = 0xFF00;
2986 Warning(
"HSV",
"Visual not initiated");
2994 Warning(
"HSV",
"Failed to create image");
3014 Warning(
"HSV",
"Failed to create rendered image");
3052 Warning(
"Gradient",
"Visual not initiated");
3066 if ((
angle > 2 * 180 * 15 / 16) || (
angle < 2 * 180 * 1 / 16)) {
3068 }
else if (
angle < 2 * 180 * 3 / 16) {
3070 }
else if (
angle < 2 * 180 * 5 / 16) {
3072 }
else if (
angle < 2 * 180 * 7 / 16) {
3074 }
else if (
angle < 2 * 180 * 9 / 16) {
3076 }
else if (
angle < 2 * 180 * 11 / 16) {
3078 }
else if (
angle < 2 * 180 * 13 / 16) {
3093 for (
p = (
char*)offsets;
isspace((
int)*
p);
p++) { }
3114 gradient.offset =
new double[
npoints1];
3131 Warning(
"Gradient",
"Failed to parse color [%s] - defaulting to black",
pb);
3136 for (
p = (
char*)offsets;
isspace((
int)*
p);
p++) { }
3162 for (i = 0; i < gradient.npoints/2; i++) {
3163 int i2 = gradient.npoints - 1 - i;
3165 double o = gradient.offset[i];
3166 gradient.color[i] = gradient.color[
i2];
3167 gradient.color[
i2] =
c;
3168 gradient.offset[i] = gradient.offset[
i2];
3169 gradient.offset[
i2] = o;
3171 for (i = 0; i < gradient.npoints; i++) {
3172 gradient.offset[i] = 1.0 - gradient.offset[i];
3178 delete [] gradient.color;
3179 delete [] gradient.offset;
3183 Warning(
"Gradient",
"Failed to create gradient image");
3196 layers[0].dst_x = 0;
3197 layers[0].dst_y = 0;
3198 layers[0].clip_width =
fImage->width;
3199 layers[0].clip_height =
fImage->height;
3200 layers[0].bevel =
nullptr;
3202 layers[1].dst_x =
x;
3203 layers[1].dst_y =
y;
3204 layers[1].clip_width =
width;
3205 layers[1].clip_height =
height;
3211 Warning(
"Gradient",
"Failed to create merged image");
3230 cmp = (cmp * 12) / 10;
3232 return (cmp > 255) ? 255 : cmp;
3293 Warning(
"Bevel",
"Visual not initiated");
3307 bevel.hi_color = lo;
3312 bevel.lo_color = lo;
3321 if (
bevel.top_outline > 1) {
3325 if (
bevel.left_outline > 1) {
3329 if (
bevel.right_outline > 1) {
3330 bevel.right_inline +=
bevel.right_outline - 1;
3333 if (
bevel.bottom_outline > 1) {
3334 bevel.bottom_inline +=
bevel.bottom_outline - 1;
3338 ARGB32 fill = ((
hi>>24) != 0xff) || ((lo>>24) != 0xff) ?
bevel.hilo_color : (
bevel.hilo_color | 0xff000000);
3344 Warning(
"Bevel",
"Failed to create image");
3360 layers[0].dst_x = 0;
3361 layers[0].dst_y = 0;
3362 layers[0].clip_width =
fImage->width;
3363 layers[0].clip_height =
fImage->height;
3364 layers[0].bevel =
nullptr;
3371 Warning(
"Bevel",
"Failed to create bevel image");
3378 layers[1].dst_x =
x;
3379 layers[1].dst_y =
y;
3380 layers[1].clip_width =
width;
3381 layers[1].clip_height =
height;
3382 layers[1].bevel = &
bevel;
3390 Warning(
"Bevel",
"Failed to image");
3410 Warning(
"Pad",
"Visual not initiated");
3418 Warning(
"Pad",
"Failed to create image");
3437 Warning(
"Pad",
"Failed to create output image");
3454 Warning(
"Crop",
"Visual not initiated");
3470 Warning(
"Crop",
"input size larger than image");
3477 Warning(
"Crop",
"Failed to start image decoding");
3485 Warning(
"Crop",
"Failed to create image");
3493 Warning(
"Crop",
"Failed to start image output");
3533 Warning(
"Append",
"Visual not initiated");
3549 Pad(color, 0,
im->GetWidth(), 0, 0);
3551 }
else if (opt ==
"/") {
3552 Pad(color, 0, 0, 0,
im->GetHeight());
3572 Warning(
"BeginPaint",
"Visual not initiated");
3590 Warning(
"BeginPaint",
"Failed to create image");
3604 Warning(
"EndPaint",
"no image");
3608 if (!
fImage->alt.argb32)
return;
3614 Warning(
"EndPaint",
"Failed to create image");
3631 Warning(
"GetArgbArray",
"no image");
3636 if (!
img)
return nullptr;
3638 if (!
img->alt.argb32) {
3659 Warning(
"GetRgbaArray",
"no image");
3664 if (!
img)
return nullptr;
3666 if (!
img->alt.argb32) {
3683 for (i = 0; i <
img->height; i++) {
3684 for (
j = 0;
j <
img->width;
j++) {
3704 Warning(
"GetScanline",
"no image");
3712 0,
y,
img->width, 1,
nullptr);
3716 Warning(
"GetScanline",
"Failed to start image decoding");
3741#if defined(R__GNU) && defined(__i386__) && !defined(__sun)
3742#define _MEMSET_(dst, lng, val) __asm__("movl %0,%%eax \n"\
3743 "movl %1,%%edi \n" \
3744 "movl %2,%%ecx \n" \
3749 :"g" (val), "g" (dst), "g" (lng) \
3750 :"eax","edi","ecx" \
3754 #define _MEMSET_(dst, lng, val) do {\
3755 for( UInt_t j=0; j < lng; j++) *((dst)+j) = val; } while (0)
3759#define FillSpansInternal(npt, ppt, widths, color) do {\
3760 UInt_t yy = ppt[0].fY*fImage->width;\
3761 for (UInt_t i = 0; i < npt; i++) {\
3762 _MEMSET_(&fImage->alt.argb32[Idx(yy + ppt[i].fX)], widths[i], color);\
3763 yy += ((i+1 < npt) && (ppt[i].fY != ppt[i+1].fY) ? fImage->width : 0);\
3774 if (!
InitImage(
"FillRectangleInternal")) {
3800 if (!
fImage->alt.argb32) {
3837 Warning(
"FillRectangle",
"Visual not initiated");
3969 if (!
dx && !
dy)
return;
4099 Warning(
"DrawRectangle",
"Visual not initiated");
4111 if (!
fImage->alt.argb32) {
4115 if (!
fImage->alt.argb32) {
4116 Warning(
"DrawRectangle",
"Failed to get argb32 pixel array");
4352 if ((
iDash%2) == 0) {
4376 if ((
iDash%2) == 0) {
4430 if ((
iDash%2) == 0) {
4456 if ((
iDash%2) == 0) {
4547 if ((
iDash%2) == 0) {
4566 if ((
iDash%2) == 0) {
4606 if ((
iDash%2) == 0) {
4625 if ((
iDash%2) == 0) {
4666 }
else if (
y1 ==
y2) {
4711 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4712 Warning(
"PutPixel",
"Out of range width=%d x=%d, height=%d y=%d",
4729 Warning(
"PolyPoint",
"No points specified");
4742 for (i = 0; i <
npt; i++) {
4749 for (i = 0; i <
npt; i++) {
4753 if ((
x < 0) || (
y < 0) || (
x >= (
int)
fImage->width) || (
y >= (
int)
fImage->height)) {
4770 Warning(
"DrawSegments",
"Invalid data nseg=%d seg=0x%zx",
nseg, (
size_t)
seg);
4777 pt[0].fX =
seg->fX1;
4778 pt[1].fX =
seg->fX2;
4779 pt[0].fY =
seg->fY1;
4780 pt[1].fY =
seg->fY2;
4798 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx col=%s widths=0x%zx stipple=0x%zx w=%d h=%d",
4841 Warning(
"FillSpans",
"Invalid input data npt=%d ppt=0x%zx widths=0x%zx tile=0x%zx",
4880 Warning(
"CropSpans",
"No points specified npt=%d ppt=0x%zx widths=0x%zx",
npt, (
size_t)
ppt, (
size_t)
widths);
4896 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4901 for (i = 0; i <
npt; i++) {
4904 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4908 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4916 if (idx <
sz)
fImage->alt.argb32[idx] = 0;
4950 Warning(
"CopyArea",
"Visual not initiated");
4955 Warning(
"CopyArea",
"no image");
4975 if (!
fImage->alt.argb32) {
4978 if (!out->alt.argb32) {
4983 if (
fImage->alt.argb32 && out->alt.argb32) {
4984 for (
y = 0;
y < (
int)
h;
y++) {
4985 for (
x = 0;
x < (
int)
w;
x++) {
4988 (
x +
xdst >= (
int)out->width) || (
y +
ydst >= (
int)out->height) )
continue;
4994 out->alt.argb32[
idx2] = 0;
4997 out->alt.argb32[
idx2] &=
fImage->alt.argb32[idx];
5003 out->alt.argb32[
idx2] &=
~fImage->alt.argb32[idx];
5008 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]) & (~out->alt.argb32[
idx2]);
5017 out->alt.argb32[
idx2] ^=
~fImage->alt.argb32[idx];
5029 out->alt.argb32[
idx2] |=
~fImage->alt.argb32[idx];
5032 out->alt.argb32[
idx2] = (
~fImage->alt.argb32[idx]) | (~out->alt.argb32[
idx2]);
5035 out->alt.argb32[
idx2] = 0xFFFFFFFF;
5039 out->alt.argb32[
idx2] =
fImage->alt.argb32[idx];
5063 int i,
j, ix, iy,
w,
h;
5065 ARGB32 color = 0xFFFFFFFF;
5072 for (i = 0; i <
nx; i++) {
5074 for (
j = 0;
j <
ny;
j++) {
5076 if (
icol != color) {
5146 int mr = 0,
m1r = 0;
5170 Warning(
"GetPolygonSpans",
"No points specified npt=%d ppt=0x%zx",
npt, (
size_t)
ppt);
5254 }
while (
y !=
ymax);
5279 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5356 if ((count < 3) || !
ptsIn) {
5357 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)
ptsIn);
5396 ET.scanlines.next =
nullptr;
5397 ET.ymin =
ET.ymax = 0;
5402 pSLL =
ET.scanlines.next;
5404 for (
y =
ET.ymin;
y <
ET.ymax;
y++) {
5418 *
width++ =
pAET->next->bres.minor_axis -
pAET->bres.minor_axis;
5421 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5437 if (!
stipple && ((color & 0xff000000)==0xff000000)) {
5457 if ((count < 3) || !
ptsIn) {
5458 Warning(
"DrawFillArea",
"No points specified npt=%d ppt=0x%zx", count, (
size_t)
ptsIn);
5484 ET.scanlines.next =
nullptr;
5485 ET.ymin =
ET.ymax = 0;
5490 pSLL =
ET.scanlines.next;
5492 for (
y =
ET.ymin;
y <
ET.ymax;
y++) {
5506 *
width++ =
pAET->next->bres.minor_axis -
pAET->bres.minor_axis;
5532 ctx->canvas_width =
im->width;
5533 ctx->canvas_height =
im->height;
5534 ctx->canvas =
im->alt.argb32;
5535 ctx->scratch_canvas =
nullptr;
5548 if (ctx->scratch_canvas)
free(ctx->scratch_canvas);
5575 for (
int i = 0; i <
sz; i++) {
5630 r += ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
5631 g += ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
5632 b += (
fImage->alt.argb32[idx] & 0x0000ff);
5642 col[0] = (
r << 16) + (
g << 8) +
b;
5679 d = ((
d + 10) * 5) >> 8;
5720 ttf.SetTextFont(
text->GetTextFont());
5730 ttf.SetRotationMatrix(
text->GetTextAngle());
5733 const wchar_t *
wcsTitle =
reinterpret_cast<const wchar_t *
>(
text->GetWcsTitle());
5737 ttf.PrepareString(
text->GetTitle());
5801 if (align == 1 || align == 2 || align == 3) {
5803 }
else if (align == 4 || align == 5 || align == 6) {
5810 if (align == 3 || align == 6 || align == 9) {
5812 }
else if (align == 2 || align == 5 || align == 8) {
5843 ttf.SetTextFont(font_name);
5931 params.gamma_table =
nullptr;
5932 params.compression = 0;
5934 params.search_path =
nullptr;
5935 params.subimage = 0;
5940 char *ptr = buffer[0];
5941 while (
isspace((
int)*ptr)) ++ptr;
5976 Warning(
"CreateThumbnail",
"No image");
5981 Warning(
"CreateThumbnail",
"Visual not initiated");
5985 static char *buf =
nullptr;
6011 layers[0].dst_x = 0;
6012 layers[0].dst_y = 0;
6013 layers[0].clip_width =
img->width;
6014 layers[0].clip_height =
img->height;
6015 layers[0].bevel =
nullptr;
6017 layers[1].dst_x = 0;
6018 layers[1].dst_y = 0;
6019 layers[1].clip_width =
img->width;
6020 layers[1].clip_height =
img->height;
6063 if (
b.IsReading()) {
6100 char *buffer =
new char[
size];
6101 b.ReadFastArray(buffer,
size);
6130 char *buffer =
nullptr;
6133 b.WriteFastArray(buffer,
size);
6150 if (
fImage->alt.vector) {
6191 if ((start > 0) && (stop - start > 0)) {
6218 for (
int i = 0; i <
sz; i++) {
6261 for (
int i = 0; i <
sz; i++) {
6305 for (
int i = 0; i <
sz; i++) {
6348 for (
int i = 0; i <
sz; i++) {
6391 for (
int i = 0; i <
sz; i++) {
6414 const char * ,
const char * )
6428 Warning(
"Gray",
"Image not initiated");
6433 Warning(
"Gray",
"Visual not initiated");
6457 if (
fImage->alt.argb32) {
6461 for (i = 0; i <
fImage->height; i++) {
6465 r = ((
fImage->alt.argb32[idx] & 0xff0000) >> 16);
6466 g = ((
fImage->alt.argb32[idx] & 0x00ff00) >> 8);
6467 b = (
fImage->alt.argb32[idx] & 0x0000ff);
6468 l = (57*
r + 181*
g + 18*
b)/256;
6488 Warning(
"ToGray",
"Failed to start image output");
6502 for (i = 0; i <
fImage->height; i++) {
6558 Warning(
"FromWindow",
"Visual not initiated");
6565 static int x11 = -1;
6566 if (x11 < 0) x11 =
gVirtualX->InheritsFrom(
"TGX11");
6590 for (
UInt_t i = 0; i <
h/2; ++i) {
6621 gPad->Range(-left / (1.0 - left - right),
6622 -bottom / (1.0 - top - bottom),
6623 1 + right / (1.0 - left - right),
6624 1 + top / ( 1.0 - top - bottom));
6625 gPad->RangeAxis(0, 0, 1, 1);
6635 char *buf =
nullptr;
6641 str.ReplaceAll(
"static",
"const");
6645 str.ReplaceAll(
"asxpm",
xpm.Data());
6646 out <<
"\n" << str <<
"\n\n";
6651 out <<
"asimage = TImage::Create();\n";
6652 out <<
" asimage->SetImageBuffer( (char **)" <<
xpm <<
", TImage::kXpm);\n";
6654 out <<
" asimage->Draw();\n";
6667 static char buf[32];
6675 if (!
fread(buf, 1, 20, fp)) {
6680 char dpi1 = (set & 0xffff) >> 8;
6681 char dpi2 = set & 0xff;
6686 for (i = 0; i < 20; i++) {
6687 if ((buf[i] == 0x4a) && (buf[i+1] == 0x46) && (buf[i+2] == 0x49) &&
6688 (buf[i+3] == 0x46) && (buf[i+4] == 0x00) ) {
6694 if (i == 20 ||
dpi+4 >= 20) {
6696 printf(
"file %s : wrong JPEG format\n",
name);
6711 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)