1

これは、バーコード画像を作成するための私のコードです:

 class Program
    {
        static void Main(string[] args)
        {
            CreateBarcode("The quick brown fox jumps over the lazy dog".ToUpper());

        }

        private static void CreateBarcode(string code)
        {
            var myBitmap = new Bitmap(500, 50);
            var g = Graphics.FromImage(myBitmap);
            var jgpEncoder = GetEncoder(ImageFormat.Jpeg);

            g.Clear(Color.White);

            var strFormat = new StringFormat { Alignment = StringAlignment.Center };
            g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat);

            var myEncoder = Encoder.Quality;
            var myEncoderParameters = new EncoderParameters(1);

            var myEncoderParameter = new EncoderParameter(myEncoder, 100L);
            myEncoderParameters.Param[0] = myEncoderParameter;
            //MemoryStream memoryStrem = new 
            myBitmap.Save(@"d:\Barcode.jpg", jgpEncoder, myEncoderParameters);
        }

        private static ImageCodecInfo GetEncoder(ImageFormat format)
        {
            var codecs = ImageCodecInfo.GetImageDecoders();

            foreach (var codec in codecs)
            {
                if (codec.FormatID == format.Guid)
                {
                    return codec;
                }
            }
            return null;
        } 

    }

これは正常に動作しますが、次の行:g.DrawString(code, new Font("Free 3 of 9", 50), Brushes.Black, new RectangleF(0, 0, 500, 50), strFormat);

ご覧のとおり、ここの幅は 500 です。大きな段落のテキストを指定すると、500 では不十分ではないかと心配になります。コンテンツに基づいてこの幅を動的にする方法はありますか?

4

1 に答える 1

0

古すぎて答えることができません。誰かを助けるかもしれないので、まだ投稿しています。ダミーのビットマップを使用してグラフィック オブジェクトを作成し、ビットマップとグラフィック オブジェクトを再初期化した後、フォントの長さを調べることができます。

var myBitmap = new Bitmap(1, 1);
Font threeOfNine = new Font("Free 3 of 9", 60, FontStyle.Regular, GraphicsUnit.Point);
var g = Graphics.FromImage(myBitmap);
SizeF dataSize = g.MeasureString(code, threeOfNine);
myBitmap = new Bitmap(myBitmap, dataSize.ToSize());
g = Graphics.FromImage(myBitmap);
于 2016-07-24T17:48:57.323 に答える