On Wed, 21 May 2014 at 13:05:02 +0800, David Maciejak wrote: > This patch adds RVerticalFlipImage and RHorizontalFlipImage functions.
You forgot to write the patch inline to ease review. I'm doing that now. Btw, checkpatch detected this: WARNING: braces {} are not necessary for single statement blocks #74: FILE: wrlib/flip.c:42: + if (!img) { + return NULL; + } WARNING: braces {} are not necessary for single statement blocks #129: FILE: wrlib/flip.c:97: + if (!img) { + return NULL; + } total: 2 errors, 2 warnings, 159 lines checked 0001-wrlib-add-image-flip-functions.patch has style problems, please review. and it would be better to remove the braces (even though that's just a warning, it's a style I've been trying to enforce and many parts of the code follow it). >From a89de98dce68e4ed256cb00c8a6b78815d5b1cd5 Mon Sep 17 00:00:00 2001 From: David Maciejak <david.macie...@gmail.com> Date: Wed, 21 May 2014 11:59:48 +0700 Subject: [PATCH] wrlib: add image flip functions This patch adds RVerticalFlipImage and RHorizontalFlipImage functions. --- wrlib/Makefile.am | 1 + wrlib/flip.c | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++ wrlib/libwraster.map | 2 + wrlib/wraster.h | 3 ++ 4 files changed, 141 insertions(+) create mode 100644 wrlib/flip.c diff --git a/wrlib/Makefile.am b/wrlib/Makefile.am index 3f229c5..489b4a4 100644 --- a/wrlib/Makefile.am +++ b/wrlib/Makefile.am @@ -34,6 +34,7 @@ libwraster_la_SOURCES = \ misc.c \ scale.c \ rotate.c \ + flip.c \ convolve.c \ save_xpm.c \ xutil.c \ diff --git a/wrlib/flip.c b/wrlib/flip.c new file mode 100644 index 0000000..e0aeb5c --- /dev/null +++ b/wrlib/flip.c @@ -0,0 +1,135 @@ +/* flip.c - image flip + * + * Raster graphics library + * + * Copyright (c) 2014 Window Maker Team + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include <config.h> + +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <X11/Xlib.h> +#include "wraster.h" + +RImage *RVerticalFlipImage(RImage *image) +{ + RImage *img; + int nwidth, nheight; + int x, y; + int bpp = image->format == RRGBAFormat ? 4 : 3; + + nwidth = image->width; + nheight = image->height; + + img = RCreateImage(nwidth, nheight, True); + if (!img) { + return NULL; + } + + if (bpp == 3) { + unsigned char *optr, *nptr; + + optr = image->data; + nptr = img->data + 4 * (nwidth * nheight - nwidth - 1); + + for (y = 0; y < nheight; y++) { + for (x = 0; x < nwidth; x++) { + nptr[0] = optr[0]; + nptr[1] = optr[1]; + nptr[2] = optr[2]; + nptr[3] = 255; + + optr += 3; + nptr += 4; + } + nptr -= nwidth*8; + } + } else { + unsigned char *optr, *nptr; + + optr = image->data; + nptr = img->data + 4 * (nwidth * nheight - nwidth - 1); + + for (y = 0; y < nheight; y++) { + for (x = 0; x < nwidth; x++) { + nptr[0] = optr[0]; + nptr[1] = optr[1]; + nptr[2] = optr[2]; + nptr[3] = optr[3]; + + optr += 4; + nptr += 4; + } + nptr -= nwidth*8; + } + } + return img; +} + +RImage *RHorizontalFlipImage(RImage *image) +{ + RImage *img; + int nwidth, nheight; + int x, y; + int bpp = image->format == RRGBAFormat ? 4 : 3; + + nwidth = image->width; + nheight = image->height; + + img = RCreateImage(nwidth, nheight, True); + if (!img) { + return NULL; + } + + if (bpp == 3) { + unsigned char *optr, *nptr; + + nptr = img->data + nwidth * nheight * 4 - 4; + for (y = nheight; y; y--) { + for (x = 0; x < nwidth; x++) { + optr = image->data + (y*nwidth + x) * 3; + + nptr[0] = optr[0]; + nptr[1] = optr[1]; + nptr[2] = optr[2]; + nptr[3] = 255; + + nptr -= 4; + } + } + } else { + unsigned char *optr, *nptr; + + nptr = img->data + nwidth * nheight * 4 - 4; + for (y = nheight; y; y--) { + for (x = 0; x < nwidth; x++) { + optr = image->data + (y*nwidth + x) * 4; + + nptr[0] = optr[0]; + nptr[1] = optr[1]; + nptr[2] = optr[2]; + nptr[3] = optr[3]; + + nptr -= 4; + } + } + } + return img; +} diff --git a/wrlib/libwraster.map b/wrlib/libwraster.map index 062dcd9..cf36401 100644 --- a/wrlib/libwraster.map +++ b/wrlib/libwraster.map @@ -72,6 +72,8 @@ LIBWRASTER3 RRetainImage; RRGBtoHSV; RRotateImage; + RVerticalFlipImage; + RHorizontalFlipImage; RSaveImage; RScaleImage; RShutdown; diff --git a/wrlib/wraster.h b/wrlib/wraster.h index 2003869..45cbcc6 100644 --- a/wrlib/wraster.h +++ b/wrlib/wraster.h @@ -371,6 +371,9 @@ RImage *RSmoothScaleImage(RImage *src, unsigned new_width, RImage *RRotateImage(RImage *image, float angle); +RImage *RVerticalFlipImage(RImage *image); + +RImage *RHorizontalFlipImage(RImage *image); RImage *RMakeTiledImage(RImage *tile, unsigned width, unsigned height); -- 1.8.3.2 -- To unsubscribe, send mail to wmaker-dev-unsubscr...@lists.windowmaker.org.