清理图像WaterMark上的表面

时间:2010-08-11 08:15:57

标签: c# asp.net drawing watermark

表面有一个图像,并在图像上写入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 :(得分:0)

我会看看你是如何创建位图的。

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

这条线每次都需要在那里,即imagedir一直都在那里吗?

创建后会丢弃生成的位图吗?

此功能会发生什么:

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

你似乎保存了bmp文件但没有丢弃它?

我从GDI +看到了一些奇怪的行为,所以我从这里开始。