changeset 1507:47a49d6d7132

speed optimized :)
author arpi
date Mon, 13 Aug 2001 19:33:41 +0000
parents 94d929f91b06
children 6e752419c7e8
files TOOLS/subfont-c/subfont.c
diffstat 1 files changed, 19 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/TOOLS/subfont-c/subfont.c	Mon Aug 13 18:39:23 2001 +0000
+++ b/TOOLS/subfont-c/subfont.c	Mon Aug 13 19:33:41 2001 +0000
@@ -453,23 +453,23 @@
 	int r,
 	int mwidth) {
 
-    int x, y, mx, my;
+    int x, y;
     for (y = 0; y<height; ++y) {
 	for (x = 0; x<width; ++x, ++s, ++t) {
 	    unsigned max = 0;
 	    unsigned *mrow = m + r;
 	    unsigned char *srow = s -r*width;
+	    int x1=(x<r)?-x:-r;
+	    int x2=(x+r>=width)?(width-x-1):r;
+	    int my;
 
 	    for (my = -r; my<=r; ++my, srow+= width, mrow+= mwidth) {
+		int mx;
 		if (y+my < 0) continue;
 		if (y+my >= height) break;
 
-		for (mx = -r; mx<=r; ++mx) {
-		    unsigned v;
-		    if (x+mx < 0) continue;
-		    if (x+mx >= width) break;
-
-		    v = srow[mx] * mrow[mx];
+		for (mx = x1; mx<=x2; ++mx) {
+		    unsigned v = srow[mx] * mrow[mx];
 		    if (v>max) max = v;
 		}
 	    }
@@ -523,24 +523,25 @@
 	int mwidth,
 	unsigned volume) {
 
-    int x, y, mx, my;
+    int x, y;
 
     for (y = 0; y<height; ++y) {
 	for (x = 0; x<width; ++x, ++s, ++t) {
 	    unsigned sum = 0;
 	    unsigned *mrow = m + r;
 	    unsigned char *srow = s -r*width;
+	    int x1=(x<r)?-x:-r;
+	    int x2=(x+r>=width)?(width-x-1):r;
+	    int my;
 
 	    for (my = -r; my<=r; ++my, srow+= width, mrow+= mwidth) {
+		int mx;
 		if (y+my < 0) continue;
 		if (y+my >= height) break;
 
-		for (mx = -r; mx<=r; ++mx) {
-		    if (x+mx < 0) continue;
-		    if (x+mx >= width) break;
+		for (mx = x1; mx<=x2; ++mx)
+		    sum+= srow[mx] * mrow[mx];
 
-		    sum+= srow[mx] * mrow[mx];
-		}
 	    }
 	    *t = (sum + volume/2) / volume;
 	}
@@ -592,9 +593,12 @@
     if (DEBUG) eprintf("\n");
 
 
-    outline(buffer, tbuffer, width, height, om, o_r, o_w);	// solid outline
+    if(thickness==1.0)
+      outline1(buffer, tbuffer, width, height);	// FAST solid 1 pixel outline
+    else
+      outline(buffer, tbuffer, width, height, om, o_r, o_w);	// solid outline
+    
     //outline(buffer, tbuffer, width, height, gm, g_r, g_w);	// Gaussian outline
-    //outline1(buffer, tbuffer, width, height);	// solid 1 pixel outline
 
     blur(tbuffer, abuffer, width, height, gm, g_r, g_w, volume);