Beispiel #1
0
        private static void RenderLetter(char letter, BitmapFont bitmapFont, ImageData imageData, int x, int y)
        {
            float tvTop    = 0;
            float tvBottom = 0;
            float tuLeft   = 0;
            float tuRight  = 0;

            int textureWidth  = bitmapFont.Texture.Width;
            int textureHeight = bitmapFont.Texture.Height;

            bitmapFont.AssignCharacterTextureCoordinates((int)letter, out tvTop, out tvBottom, out tuLeft, out tuRight);


            float characterHeight = bitmapFont.GetCharacterHeight(letter);

            int pixelLeft = (int)(tuLeft * textureWidth);
            int pixelTop  = (int)(tvTop * textureHeight);

            int pixelRight  = (int)(tuRight * textureWidth);
            int pixelBottom = (int)(tvBottom * textureWidth);

            float unitPerPixel = (characterHeight / (float)(pixelBottom - pixelTop));

            int pixelFromTop = (int)(bitmapFont.LineHeightInPixels * bitmapFont.DistanceFromTopOfLine((int)letter) / (2));// * .25f);


            for (int sourceY = pixelTop; sourceY < pixelBottom; sourceY++)
            {
                for (int sourceX = pixelLeft; sourceX < pixelRight; sourceX++)
                {
                    Color colorFromSource = sTemporaryTextureBuffer[sourceY * textureHeight + sourceX];

                    if (colorFromSource.A != 0)
                    {
                        imageData.SetPixel(x + (sourceX - pixelLeft), pixelFromTop + y + (sourceY - pixelTop), colorFromSource);
                    }
                }
            }
        }
        private static void RenderLetter(char letter, BitmapFont bitmapFont, ImageData imageData, int x, int y)
        {
            float tvTop = 0;
            float tvBottom = 0;
            float tuLeft = 0;
            float tuRight = 0;

            int textureWidth = bitmapFont.Texture.Width;
            int textureHeight = bitmapFont.Texture.Height;

            bitmapFont.AssignCharacterTextureCoordinates((int)letter, out tvTop, out tvBottom, out tuLeft, out tuRight);
            
            
            float characterHeight = bitmapFont.GetCharacterHeight(letter);

            int pixelLeft = (int)(tuLeft * textureWidth);
            int pixelTop = (int)(tvTop * textureHeight);

            int pixelRight = (int)(tuRight * textureWidth);
            int pixelBottom = (int)(tvBottom * textureWidth);

            float unitPerPixel = (characterHeight / (float)(pixelBottom - pixelTop));

            int pixelFromTop = (int)(bitmapFont.LineHeightInPixels * bitmapFont.DistanceFromTopOfLine((int)letter) / (2));// * .25f);


            for (int sourceY = pixelTop; sourceY < pixelBottom; sourceY++)
            {
                for (int sourceX = pixelLeft; sourceX < pixelRight; sourceX++)
                {
                    Color colorFromSource = sTemporaryTextureBuffer[sourceY * textureHeight + sourceX];

                    if (colorFromSource.A != 0)
                    {

                        imageData.SetPixel(x + (sourceX - pixelLeft), pixelFromTop + y + (sourceY - pixelTop), colorFromSource);
                    }
                }
            }

        }