mirror of https://github.com/Chlumsky/msdfgen.git
Minification fixed, minor error corrections
This commit is contained in:
parent
61d3929db0
commit
143767c7ef
10
README.md
10
README.md
|
|
@ -8,7 +8,7 @@ and pseudo-distance fields, its primary purpose is to generate multi-channel dis
|
|||
using a method I have developed. Unlike monochrome distance fields, they have the ability
|
||||
to reproduce sharp corners almost perfectly by utilizing all three color channels.
|
||||
|
||||
The following sequence of images demonstrates the improvement in image quality.
|
||||
The following comparison demonstrates the improvement in image quality.
|
||||
|
||||

|
||||

|
||||
|
|
@ -89,12 +89,12 @@ in order to generate a distance field. Please note that all classes and function
|
|||
or `CubicEdge`. You can construct them from two endpoints and 0 to 2 Bézier control points.
|
||||
- Normalize the shape using its `normalize` method and assign colors to edges if you need a multi-channel SDF.
|
||||
This can be performed automatically using the `edgeColoringSimple` heuristic, or manually by setting each edge's
|
||||
`color` member. Keep in mind that at least two color channels must be turned on in each edge, and the color should
|
||||
only change at corners.
|
||||
`color` member. Keep in mind that at least two color channels must be turned on in each edge, and iff two edges meet
|
||||
at a sharp corner, they must only have one channel in common.
|
||||
- Call `generateSDF`, `generatePseudoSDF`, or `generateMSDF` to generate a distance field into a floating point
|
||||
`Bitmap` object. This can then be worked with further or saved to a file using `saveBmp` or `savePng`.
|
||||
- You may also render an image from the distance field using `renderSDF`. Consider calling `simulate8bit`
|
||||
on the distance field beforehand to simulate the standard 8 bits/pixel image format.
|
||||
on the distance field beforehand to simulate the standard 8 bits/channel image format.
|
||||
|
||||
Example:
|
||||
```c++
|
||||
|
|
@ -163,7 +163,7 @@ The text shape description has the following syntax.
|
|||
- Points in a contour are separated with semicolons.
|
||||
- The last point of each contour must be equal to the first, or the symbol `#` can be used, which represents the first point.
|
||||
- There can be an edge segment specification between any two points, also separated by semicolons.
|
||||
This can include the edge's color (`c`, `m`, or `y`) and/or one or two curve control points inside parentheses.
|
||||
This can include the edge's color (`c`, `m`, `y` or `w`) and/or one or two Bézier curve control points inside parentheses.
|
||||
|
||||
For example,
|
||||
```
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ static float distVal(float dist, double pxRange) {
|
|||
|
||||
void renderSDF(Bitmap<float> &output, const Bitmap<float> &sdf, double pxRange) {
|
||||
int w = output.width(), h = output.height();
|
||||
pxRange *= (w+h)/(sdf.width()+sdf.height());
|
||||
pxRange *= (double) (w+h)/(sdf.width()+sdf.height());
|
||||
for (int y = 0; y < h; ++y)
|
||||
for (int x = 0; x < w; ++x) {
|
||||
float s = sample(sdf, Point2((x+.5)/w, (y+.5)/h));
|
||||
|
|
@ -49,7 +49,7 @@ void renderSDF(Bitmap<float> &output, const Bitmap<float> &sdf, double pxRange)
|
|||
|
||||
void renderSDF(Bitmap<FloatRGB> &output, const Bitmap<float> &sdf, double pxRange) {
|
||||
int w = output.width(), h = output.height();
|
||||
pxRange *= (w+h)/(sdf.width()+sdf.height());
|
||||
pxRange *= (double) (w+h)/(sdf.width()+sdf.height());
|
||||
for (int y = 0; y < h; ++y)
|
||||
for (int x = 0; x < w; ++x) {
|
||||
float s = sample(sdf, Point2((x+.5)/w, (y+.5)/h));
|
||||
|
|
@ -62,7 +62,7 @@ void renderSDF(Bitmap<FloatRGB> &output, const Bitmap<float> &sdf, double pxRang
|
|||
|
||||
void renderSDF(Bitmap<float> &output, const Bitmap<FloatRGB> &sdf, double pxRange) {
|
||||
int w = output.width(), h = output.height();
|
||||
pxRange *= (w+h)/(sdf.width()+sdf.height());
|
||||
pxRange *= (double) (w+h)/(sdf.width()+sdf.height());
|
||||
for (int y = 0; y < h; ++y)
|
||||
for (int x = 0; x < w; ++x) {
|
||||
FloatRGB s = sample(sdf, Point2((x+.5)/w, (y+.5)/h));
|
||||
|
|
@ -72,7 +72,7 @@ void renderSDF(Bitmap<float> &output, const Bitmap<FloatRGB> &sdf, double pxRang
|
|||
|
||||
void renderSDF(Bitmap<FloatRGB> &output, const Bitmap<FloatRGB> &sdf, double pxRange) {
|
||||
int w = output.width(), h = output.height();
|
||||
pxRange *= (w+h)/(sdf.width()+sdf.height());
|
||||
pxRange *= (double) (w+h)/(sdf.width()+sdf.height());
|
||||
for (int y = 0; y < h; ++y)
|
||||
for (int x = 0; x < w; ++x) {
|
||||
FloatRGB s = sample(sdf, Point2((x+.5)/w, (y+.5)/h));
|
||||
|
|
|
|||
3
main.cpp
3
main.cpp
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
/*
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-24) - standalone console program
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-28) - standalone console program
|
||||
* --------------------------------------------------------------------------------------------
|
||||
* A utility by Viktor Chlumsky, (c) 2014 - 2016
|
||||
*
|
||||
|
|
@ -78,6 +78,7 @@ static bool parseAngle(double &value, const char *arg) {
|
|||
return true;
|
||||
if (result == 2 && (c1 == 'd' || c1 == 'D')) {
|
||||
value = M_PI*value/180;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#pragma once
|
||||
|
||||
/*
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-24) - extensions
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-28) - extensions
|
||||
* ----------------------------------------------------------------------------
|
||||
* A utility by Viktor Chlumsky, (c) 2014 - 2016
|
||||
*
|
||||
|
|
|
|||
BIN
msdfgen.exe
BIN
msdfgen.exe
Binary file not shown.
|
|
@ -2,7 +2,7 @@
|
|||
#pragma once
|
||||
|
||||
/*
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-24)
|
||||
* MULTI-CHANNEL SIGNED DISTANCE FIELD GENERATOR v1.0 (2016-04-28)
|
||||
* ---------------------------------------------------------------
|
||||
* A utility by Viktor Chlumsky, (c) 2014 - 2016
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue