private void ValidateAntialiasLevel(AntialiasingLevel value) { Contract.Ensures(_antialiasLevelUsed != AntialiasingLevel.None); if (value == AntialiasingLevel.None) { return; } if (value != AntialiasingLevel.Gray5 && value != AntialiasingLevel.Gray17 && value != AntialiasingLevel.Gray65) { throw new NotSupportedException("Antialiasing level not supported."); } if (_antialiasLevelUsed.HasValue) { if (_antialiasLevelUsed != value) { throw new ArgumentException("Only one antialiasing level per font."); } } else { _antialiasLevelUsed = value; } }
/// <summary> /// Creates new instance with defined glyph typeface, Em size and anti-aliasing level. /// </summary> /// <param name="typeface">Glyph typface to use.</param> /// <param name="emSize">Character's Em Size.</param> /// <param name="antialiasingLevel">Anti-aliasing level.</param> public TinyFontBuilder(GlyphTypeface typeface, double emSize, AntialiasingLevel antialiasingLevel) { _characterImportList = new Dictionary <int, CharacterImportInfo>(); _glyphImportList = new List <CharacterImportInfo>(); _features = new List <FeatureImportInfo>(); _emSize = emSize; _typeface = typeface; _antialiasLevel = antialiasingLevel; }
public BuilderState(TinyFontBuilder current) { GlyphTypeface = current.GlyphTypeface; EmSize = current.EmSize; AntialiasingLevel = current.AntialiasingLevel; GlyphTransform = current.GlyphTransform; GlyphTransformOrigin = current.GlyphTransformOrigin; GlyphToCharacterMap = current.GlyphToCharacterMap; }
public CharacterImportInfo(BuilderState builderState, CharacterGlyphPair mapping) { Contract.Requires(builderState != null, "Typeface cannot be null."); Contract.Requires(mapping != null, "Mapping cannot be null."); _mapping = mapping; _antialiasLevel = builderState.AntialiasingLevel; _typeface = builderState.GlyphTypeface; _emSize = builderState.EmSize; if (mapping.Glyph.HasValue) { InitializeGlyphRun(); InitializeTransform(builderState.GlyphTransform, builderState.GlyphTransformOrigin); InitializeMetrics(); } else { _dataInitialized = true; } }
private static Int32Rect ToTinyBitmap1bpp(WriteableBitmap glyphBitmap, AntialiasingLevel antialiasLevel, out BitArray[] bitmapDataRows, out BitArray antialiasData) { Contract.Requires(glyphBitmap != null, "Glyph bitmap cannot be null."); Contract.Requires(glyphBitmap.Format.BitsPerPixel == 32, "Glyph bitmap must be in 32 bits per pixel format."); int height = glyphBitmap.PixelHeight; int width = glyphBitmap.PixelWidth; Int32Thickness inkBox = new Int32Thickness(width, height, -1, -1); bitmapDataRows = new BitArray[height]; antialiasData = null; int antialiasStep = 0; if (antialiasLevel != AntialiasingLevel.None) { antialiasStep = OpacityOpaque / ((int)antialiasLevel * (int)antialiasLevel); antialiasData = new BitArray(0); } for (int y = 0; y < bitmapDataRows.Length; y++) { BitArray bitmapDataRow = bitmapDataRows[y] = new BitArray(width); for (int x = 0; x < width; x++) { byte pixel = Marshal.ReadByte(glyphBitmap.BackBuffer, y * glyphBitmap.BackBufferStride + x * glyphBitmap.Format.BitsPerPixel / BitsPerByte + 0); if (pixel > 0) { bitmapDataRow[x] = true; if (y < inkBox.Top) { inkBox.Top = y; } if (x < inkBox.Left) { inkBox.Left = x; } if (y > inkBox.Bottom) { inkBox.Bottom = y; } if (x > inkBox.Right) { inkBox.Right = x; } if (antialiasLevel != AntialiasingLevel.None) { antialiasData.ApendMsb(pixel / antialiasStep, (int)antialiasLevel); } } } } int boxWidth = Math.Max(0, inkBox.Right - inkBox.Left + 1); int boxHeight = Math.Max(0, inkBox.Bottom - inkBox.Top + 1); return(new Int32Rect(inkBox.Left, inkBox.Top, boxWidth, boxHeight)); }
public PsyiasSystemSettings(PsyiasSystemSettings copyTarget) { MaxParticleCount = copyTarget.MaxParticleCount; Antialiasing = copyTarget.Antialiasing; Bloom = copyTarget.Bloom; }