ref: 8bb495b12b93a9be9578563aa9ca17847040ade3
parent: e95e3c07981eab6b39a04df5446c998194acb6a2
author: rodri <rgl@antares-labs.eu>
date: Sun Apr 27 14:52:15 EDT 2025
add,sobel: add saturation option
--- a/image/add.c
+++ b/image/add.c
@@ -3,6 +3,12 @@
#include <draw.h>
#include <memdraw.h>
+#define min(a,b) ((a)<(b)?(a):(b))
+#define max(a,b) ((a)>(b)?(a):(b))
+#define clamp(a,b,c) min(max(a,b),c)
+
+static int saturate;
+
static void
usage(void)
{
@@ -16,9 +22,11 @@
Memimage *img1, *img2;
uchar *p1, *p2;
uchar *p1e;
+ ulong c;
int fd;
ARGBEGIN{
+ case 's': saturate++; break;
default: usage();
}ARGEND;
if(argc != 2)
@@ -46,8 +54,13 @@
p1 = img1->data->bdata;
p2 = img2->data->bdata;
p1e = p1 + Dx(img1->r)*Dy(img1->r)*img1->nchan;
- while(p1 < p1e)
- *p1++ += *p2++;
+ while(p1 < p1e){
+ c = *p1;
+ c += *p2++;
+ if(saturate)
+ c = clamp(c, 0, 0xFF);
+ *p1++ += c;
+ }
if(writememimage(1, img1) < 0)
sysfatal("writememimage: %r");
--- a/image/sobel.c
+++ b/image/sobel.c
@@ -3,6 +3,12 @@
#include <draw.h>
#include <memdraw.h>
+#define min(a,b) ((a)<(b)?(a):(b))
+#define max(a,b) ((a)>(b)?(a):(b))
+#define clamp(a,b,c) min(max(a,b),c)
+
+static int saturate;
+
static void
usage(void)
{
@@ -16,9 +22,11 @@
Memimage *img1, *img2;
uchar *p1, *p2;
uchar *p1e;
+ ulong c;
int fd;
ARGBEGIN{
+ case 's': saturate++; break;
default: usage();
}ARGEND;
if(argc != 2)
@@ -46,8 +54,12 @@
p1 = img1->data->bdata;
p2 = img2->data->bdata;
p1e = p1 + Dx(img1->r)*Dy(img1->r)*img1->nchan;
- while(p1 < p1e)
- *p1++ = sqrt(*p1**p1 + *p2**p2++);
+ while(p1 < p1e){
+ c = sqrt(*p1**p1 + *p2**p2++);
+ if(saturate)
+ c = clamp(c, 0, 0xFF);
+ *p1++ = c;
+ }
if(writememimage(1, img1) < 0)
sysfatal("writememimage: %r");
--
⑨