shithub: brokentoys

Download patch

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");
--