0

表面用の画像があり、日付の 184 行の画像にテキストが書き込まれます。したがって、184 の異なるテキスト書き込み画像ファイルがすべて同じ背景画像で生成されることが予想されます。(コードは以下で宣言されています...)

問題は、最初のテキストが 184 の異なるデータすべてに対して書き込まれていることです。ループ内の何かを削除する必要があると思います。しかし、それは何ですか??

 for (int i = 0; i < dt.Rows.Count; i++) {
            date = Convert.ToDateTime(dt.Rows[i]["PAYMENT_DATE"]);
            branchCode = Convert.ToInt32(dt.Rows[i]["BRANCH_CODE"]);
            refNum = Convert.ToInt32(dt.Rows[i]["REF_NUM"]);
            accountNumber = Convert.ToInt32(dt.Rows[i]["ACCOUNT_NUMBER"]);
            email = dt.Rows[i]["EMAIL"].ToString();
            tableCode = dt.Rows[i]["CUSTOMER_TABLE_CODE"].ToString();

            TranLogKey logKey = new TranLogKey(date, branchCode, refNum);
            TranLogEntry entry = Log.SelectLogEntry(logKey, false);
            if (Intertech.Core.Framework.Context.CurrentContext.LogEntry == null)
                Intertech.Core.Framework.Context.CurrentContext.LogEntry = entry;

            try {
                receiptText = TransactionManager.GenerateReceipt(true, logKey, null, null, accountNumber, false);
            }
            catch (Exception exp) {
                continue;
            }

            if (receiptText != null) {
                if (receiptText.IndexOf("SURETTİR\r\n") != -1)
                    receiptText = receiptText.Substring(receiptText.IndexOf("SURETTİR\r\n") + 10).Trim();

                if (receiptText.IndexOf("İşlemi Yapan") != -1)
                    receiptText = receiptText.Substring(0, receiptText.IndexOf("İşlemi Yapan"));
                if (receiptText.IndexOf("MÜŞTERİ İMZASI") != -1)
                    receiptText = receiptText.Substring(0, receiptText.IndexOf("MÜŞTERİ İMZASI"));

                Bitmap bmp = (Bitmap)Bitmap.FromFile(imageDir);
                Graphics g = Graphics.FromImage(bmp);
                SizeF size;
                Font font = new Font("Courier New", 8, FontStyle.Regular);
                byte ALPHA = 200;
                size = g.MeasureString(receiptText, font);
                Bitmap waterbmp = new Bitmap((int)size.Width, (int)size.Height);
                Graphics waterg = Graphics.FromImage(waterbmp);
                waterg.DrawString(receiptText, font, new SolidBrush(System.Drawing.Color.Black), 2, 2);
                DrawWatermark(ref waterbmp, ref bmp, LeftIndex, TopIndex, ALPHA);
                bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);

                try {


                        GoServices.Core.SendMailOutside("The Portugal Life", "info@portugal.tr.friendship.pt",
                                    "blgnklc@skype-account.com", " e-Wish " + email, "", new string[] { "dekont.jpg" }, new object[] { ms.ToArray() });

                        LogNotificationState("K", refNum, accountNumber, 2, true, null, tableCode);

                }
                catch (Exception ex) {
                    LogNotificationState("K", 0, -1, 2, false, ex, tableCode);
                }

            }



private static void DrawWatermark(ref Bitmap watermark_bm, ref Bitmap result_bm, int x, int y, byte ALPHA) {
    System.Drawing.Color clr;

    int py, px;
    for (py = 0; py <= watermark_bm.Height - 1; py++) {
        for (px = 0; px <= watermark_bm.Width - 1; px++) {
            clr = watermark_bm.GetPixel(px, py);
            if (clr.A != 0 || clr.R != 0 || clr.G != 0 || clr.B != 0)
                watermark_bm.SetPixel(px, py, System.Drawing.Color.FromArgb(ALPHA, clr.R, clr.G, clr.B));
        }
    }
    Graphics gr = Graphics.FromImage(result_bm);
    gr.DrawImage(watermark_bm, x, y);
}
4

1 に答える 1

0

ビットマップの作成方法を確認します。

ビットマップ bmp = (ビットマップ)Bitmap.FromFile(imageDir);

この行は毎回そこにある必要がありますか?つまり、imagedir は常に同じですか?

生成されたビットマップを作成した後、破棄しますか?

この関数で何が起こるか:

DrawWatermark(ref waterbmp, ref bmp, LeftIndex, TopIndex, ALPHA);

その後、bmp ファイルを保存するようですが、破棄しないようですか?

GDI+ で奇妙な動作が見られたので、ここから始めます。

于 2010-08-11T08:28:56.957 に答える