Пример #1
0
        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;
            }
        }
Пример #2
0
        /// <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;
            }
Пример #4
0
            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;
                }
            }
Пример #5
0
            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));
            }
Пример #6
0
 public PsyiasSystemSettings(PsyiasSystemSettings copyTarget)
 {
     MaxParticleCount = copyTarget.MaxParticleCount;
     Antialiasing     = copyTarget.Antialiasing;
     Bloom            = copyTarget.Bloom;
 }