Lorenzo
2018-08-08 15:16:13 UTC
Hi,
i have a problem with the creation of a rounded rectangle with cairo.
Environment info:
cairo version: 1.14.8-1
OS: linux
A linux client creates a rounded rectangle with the following code:
let x = 0.0
let y = 0.0
let w = Double(size.w)
let h = Double(size.h)
let r = 20.0
logger.verbose("rounded rectangle
x=\(x),y=\(y),w=\(w),h=\(h),r=\(r)")
cairo_move_to(context, x, y + r)
cairo_arc(context, x + r, y + r, r, Double.pi, -Double.pi / 2.0)
cairo_line_to(context, x + w - r, y)
cairo_arc(context, x + w - r, y + r, r, -Double.pi / 2.0, 0.0)
cairo_line_to(context, x + w, y + h - r)
cairo_arc(context, x + w - r, y + h - r, r, 0.0, Double.pi / 2.0)
cairo_line_to(context, x + r, y + h)
cairo_arc(context, x + r, y + h - r, r, Double.pi / 2.0, Double.pi)
cairo_close_path(context)
cairo_set_source_rgba(context, cl.red, cl.green, cl.blue,
cl.alpha);
cairo_fill(context)
After the surface fill i have 2 different operations to be performed:
- write the png on the disk using
"cairo_surface_write_to_png(surface, "testcairo.png")"
- display the png with opengl es 3.0 as a texture (done by copy the
surface raw bytes with cairo_image_surface_get_data(surface)
in a shared memory used by the opengl server program)
Save the image on disk is ok, the image is good.
Display the image as a texture with opengl results in an ugly image:
corners have some black pixels around them.
Why this difference?
I have done some checks:
- data obtained with cairo_image_surface_get_data are the same that the
graphics server loads from the shared memory (checked PixelxPixel) so
the data transfer don't is the problem (checked also any signed/unsigned
byte conversion)
- loading the disk png as a texture instead of loading data from the
shared memory results in a good image with no problems.
My opinion is that the cairo_surface_write_to_png performs an
antialiasing algorithm and accessing raw data bypass it taking the
original image.
Is my opinion correct? If yes, any advice to solve the problem?
Regards,
Lorenzo.
i have a problem with the creation of a rounded rectangle with cairo.
Environment info:
cairo version: 1.14.8-1
OS: linux
A linux client creates a rounded rectangle with the following code:
let x = 0.0
let y = 0.0
let w = Double(size.w)
let h = Double(size.h)
let r = 20.0
logger.verbose("rounded rectangle
x=\(x),y=\(y),w=\(w),h=\(h),r=\(r)")
cairo_move_to(context, x, y + r)
cairo_arc(context, x + r, y + r, r, Double.pi, -Double.pi / 2.0)
cairo_line_to(context, x + w - r, y)
cairo_arc(context, x + w - r, y + r, r, -Double.pi / 2.0, 0.0)
cairo_line_to(context, x + w, y + h - r)
cairo_arc(context, x + w - r, y + h - r, r, 0.0, Double.pi / 2.0)
cairo_line_to(context, x + r, y + h)
cairo_arc(context, x + r, y + h - r, r, Double.pi / 2.0, Double.pi)
cairo_close_path(context)
cairo_set_source_rgba(context, cl.red, cl.green, cl.blue,
cl.alpha);
cairo_fill(context)
After the surface fill i have 2 different operations to be performed:
- write the png on the disk using
"cairo_surface_write_to_png(surface, "testcairo.png")"
- display the png with opengl es 3.0 as a texture (done by copy the
surface raw bytes with cairo_image_surface_get_data(surface)
in a shared memory used by the opengl server program)
Save the image on disk is ok, the image is good.
Display the image as a texture with opengl results in an ugly image:
corners have some black pixels around them.
Why this difference?
I have done some checks:
- data obtained with cairo_image_surface_get_data are the same that the
graphics server loads from the shared memory (checked PixelxPixel) so
the data transfer don't is the problem (checked also any signed/unsigned
byte conversion)
- loading the disk png as a texture instead of loading data from the
shared memory results in a good image with no problems.
My opinion is that the cairo_surface_write_to_png performs an
antialiasing algorithm and accessing raw data bypass it taking the
original image.
Is my opinion correct? If yes, any advice to solve the problem?
Regards,
Lorenzo.
--
cairo mailing list
***@cairographics.org
https://
cairo mailing list
***@cairographics.org
https://