Очистить поверхность на WaterMark изображения - PullRequest
0 голосов
/ 11 августа 2010

Существует изображение для поверхности, и текст написан на изображении для 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);
}

1 Ответ

0 голосов
/ 11 августа 2010

Я бы посмотрел, как вы создаете растровое изображение.

Bitmap bmp = (Bitmap) Bitmap.FromFile (imageDir);

должна ли эта строка быть там каждый раз, т. Е. Всегда ли образ отображается одинаковым?

Вы утилизируете сгенерированное растровое изображение после его создания?

что происходит в этой функции:

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

Кажется, вы сохраняете файл bmp, но не утилизируете его?

Я видел странное поведение GDI +, поэтому я бы начал здесь.

...