How to edit Drawable/XdbeBackBuffer data?...
Lee Fallat
ircsurfer33 at gmail.com
Tue Aug 21 15:56:44 PDT 2012
Alright, well I've decided to take another approach. I'm XGetImage()ing the
root window, then I darken my pixels, then, I go to store the data in a
Drawable via XPutImage, but this Drawable isn't retaining the data, it's
just white when I XCopyArea() over to what I want shown. Any
suggestions/reasons why this is happening?
Code sample:
static XImage
*xi;
void XTintBG(Monitor *m, int x, int y, int w, int h)
{
unsigned long
new_color;
unsigned long
r,g,b;
XCopyArea(dpy, root, m->barwin, dc.gc, x, y, w, h, x,
y);
xi = XGetImage(dpy, m->barwin, x, y, w, h, AllPlanes,
XYPixmap);
for(int pix_y = 0; pix_y < h; pix_y++)
{
for(int pix_x = 0; pix_x < w; pix_x++)
{
new_color = XGetPixel(xi, pix_x,
pix_y);
r = g = b =
0x00000000;
r = (new_color & 0x00FF0000) >>
16;
g = (new_color & 0x0000FF00) >>
8;
b = (new_color & 0x000000FF) >>
0;
r -=
32;
g -=
32;
b -=
32;
if(r > 255) r =
255;
if(r < 0) r =
0;
if(g > 255) g =
255;
if(g < 0) g =
0;
if(b > 255) b =
255;
if(b < 0) b =
0;
new_color = r <<
16;
new_color = new_color | (g <<
8);
new_color = new_color | (b <<
0);
XPutPixel(xi, pix_x, pix_y,
new_color);
}
}
XPutImage(dpy, m->barwin, dc.gc, xi, 0, 0, 0, 0, m->ww,
bh);
XCopyArea(dpy, m->barwin, dc.bg, dc.gc, 0, 0, m->ww, bh, 0,
0);
}
int ftime =
1;
void
drawbar(Monitor *m)
{
int
x;
unsigned int i, occ = 0, urg =
0;
XftColor
*col;
Client
*c;
if(ftime == 1)
{
ftime =
0;
XTintBG(m, 0, 0, m->ww,
bh);
}
XCopyArea(dpy, dc.bg, dc.drawable, dc.gc, 0, 0, m->ww, bh, 0, 0);
<More functions here but not relative to what I need>
}
On Mon, Aug 20, 2012 at 3:17 PM, Adam Jackson <ajax at redhat.com> wrote:
> On 8/20/12 2:08 PM, Lee Fallat wrote:
>
>> Hey,
>>
>> I'm trying to darken/lighten the image data in a Drawable/XdbeBackBuffer.
>> Any ideas on how to get access to the data?...I've done an XGetImage() on
>> Drawable but that really slows down the application I'm editing...
>>
>
> That is, in fact, how you do it. GetImage is not fast. ShmGetImage is
> faster, and as fast as you're going to get, if you insist on doing this by
> pulling all the pixels down to the client and then pushing them back up.
>
> You may instead wish to use the Render extension, which gives you the
> usual set of Porter-Duff blend operations, and which runs in the server so
> you're not copying all that data around.
>
> - ajax
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg/attachments/20120821/49931219/attachment.html>
More information about the xorg
mailing list