浏览代码

Improved error correction consistency for inverse Y-axis

Chlumsky 1 年之前
父节点
当前提交
5ec8cef4c2
共有 2 个文件被更改,包括 9 次插入12 次删除
  1. 7 10
      README.md
  2. 2 2
      core/MSDFErrorCorrection.cpp

+ 7 - 10
README.md

@@ -113,25 +113,23 @@ in order to generate a distance field. Please note that all classes and function
 
 Example:
 ```c++
-#include "msdfgen.h"
-#include "msdfgen-ext.h"
+#include <msdfgen.h>
+#include <msdfgen-ext.h>
 
 using namespace msdfgen;
 
 int main() {
-    FreetypeHandle *ft = initializeFreetype();
-    if (ft) {
-        FontHandle *font = loadFont(ft, "C:\\Windows\\Fonts\\arialbd.ttf");
-        if (font) {
+    if (FreetypeHandle *ft = initializeFreetype()) {
+        if (FontHandle *font = loadFont(ft, "C:\\Windows\\Fonts\\arialbd.ttf")) {
             Shape shape;
-            if (loadGlyph(shape, font, 'A')) {
+            if (loadGlyph(shape, font, 'A', FONT_SCALING_EM_NORMALIZED)) {
                 shape.normalize();
                 //                      max. angle
                 edgeColoringSimple(shape, 3.0);
                 //          output width, height
                 Bitmap<float, 3> msdf(32, 32);
-                //                           scale, translation
-                SDFTransformation t(Projection(1.0, Vector2(4.0, 4.0)), Range(4.0));
+                //                            scale, translation (in em's)
+                SDFTransformation t(Projection(32.0, Vector2(0.125, 0.125)), Range(0.125));
                 generateMSDF(msdf, shape, t);
                 savePng(msdf, "output.png");
             }
@@ -141,7 +139,6 @@ int main() {
     }
     return 0;
 }
-
 ```
 
 ## Using a multi-channel distance field

+ 2 - 2
core/MSDFErrorCorrection.cpp

@@ -129,10 +129,10 @@ void MSDFErrorCorrection::protectCorners(const Shape &shape) {
                 if (!(commonColor&(commonColor-1))) {
                     // Find the four texels that envelop the corner and mark them as protected.
                     Point2 p = transformation.project((*edge)->point(0));
-                    if (shape.inverseYAxis)
-                        p.y = stencil.height-p.y;
                     int l = (int) floor(p.x-.5);
                     int b = (int) floor(p.y-.5);
+                    if (shape.inverseYAxis)
+                        b = stencil.height-b-2;
                     int r = l+1;
                     int t = b+1;
                     // Check that the positions are within bounds.