Нажатие кнопки входит в бесконечный цикл (ASP.Net)

Я беру изображение с определенного пути и применяю к нему цвет, затем я хочу сохранить изображение и отобразить его снова при нажатии кнопки. но это событие щелчка идет в бесконечный цикл.

Это не вызывает цикл некоторое время, но если вы запустите проект более одного раза и разместите отладчик, то вы обнаружите, что он зацикливается.

Ниже мой код:

код aspx:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Convert.aspx.cs" Inherits="ConvertImage.Convert" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">

        <div>
            <div>
                <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click1" />
                <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            </div>
            <div>
                <asp:Image ID="OldImage" ImageUrl="~/Image/Panda.jpg" runat="server" />
                <asp:Image ID="NewImage" runat="server" />
            </div>
        </div>

    </form>
</body>
</html>

код C#:

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using static System.Net.Mime.MediaTypeNames;

namespace ConvertImage
{
    public partial class Convert : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }



        protected void Button1_Click1(object sender, EventArgs e)
        {
            CompareImage();
        }



        private void CompareImage()
        {
            Bitmap image1;
            try
            {
                image1 = new Bitmap(Server.MapPath(@"~\Image\Panda.jpg"), true);
                OldImage.ImageUrl = "~/Image/Panda.jpg";
                int x, y;


                for (x = 0; x < image1.Width; x++)
                {
                    for (y = 0; y < image1.Height; y++)
                    {
                        if (y < 150)
                        {
                            Color pixelColor = image1.GetPixel(x, y);
                            Color newColor = Color.FromArgb(pixelColor.R, 25, 60);
                            image1.SetPixel(x, y, newColor);
                        }
                        else if (y >= 150 && y < 300)
                        {
                            Color pixelColor = image1.GetPixel(x, y);
                            Color newColor = Color.FromArgb(pixelColor.R, 200, 100);
                            image1.SetPixel(x, y, newColor);
                        }
                        else
                        {

                            Color pixelColor = image1.GetPixel(x, y);
                            Color newColor = Color.FromArgb(pixelColor.R, 100, 210);
                            image1.SetPixel(x, y, newColor);

                        }
                    }
                }


                image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);
                NewImage.ImageUrl = @"~/Image/xyz.jpg";
                Label1.Text = "Pixel format: " + image1.PixelFormat.ToString();



            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }

    }
}

Пожалуйста, помогите мне, где я не прав.

1 ответ

Решение

Попробуйте вызвать Debug.Writeline(image1.height) и image1.width. Также добавьте точки останова и выполните цикл. Трудно сказать, где петля становится бесконечной. Для меня все выглядит хорошо в цикле и не должно быть бесконечным.

Опубликуйте результат Debug.Writeline, чтобы мы могли помочь вам или узнать, где вы оказались в процессе отладки через точки останова или Debug.WRiteline.

Также попробуйте запустить его на другом изображении и / или подтвердить путь к изображению

Как я уже говорил, ваш код хорош, это либо проблема с путями, которая, по-видимому, связана не с тем, что вы получаете правильную ширину и высоту, или, скорее всего, с проблемой аутентификации. Я запустил ваш код, используя это изображение Panda.jpg

и я смог получить это изображение в качестве вывода

xyz.jpg

подтвердите, если это правильный вывод.

Еще одна вещь, которую вы можете попробовать, это изменить

image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);

в

image1.Save(AppDomain.CurrentDomain.BaseDirectory + "Image/xyz.jpg", ImageFormat.Jpeg);

мой окончательный код

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
     <form id="form1" runat="server">

        <div>
            <div>
                <asp:Button ID="Button1" runat="server" Text="Submit" OnClick="Button1_Click" />
                <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
            </div>
            <div>
                <asp:Image ID="OldImage" ImageUrl="~/Image/Panda.jpg" runat="server" />
                <asp:Image ID="NewImage" runat="server" />
            </div>
        </div>

    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Drawing;
using System.Drawing.Imaging;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        CompareImage();
    }

    private void CompareImage()
    {
        Bitmap image1;
        try
        {
            image1 = new Bitmap(Server.MapPath(@"~\Image\Panda.jpg"), true);
            OldImage.ImageUrl = "~/Image/Panda.jpg";
            int x, y;


            for (x = 0; x < image1.Width; x++)
            {
                for (y = 0; y < image1.Height; y++)
                {
                    if (y < 150)
                    {
                        Color pixelColor = image1.GetPixel(x, y);
                        Color newColor = Color.FromArgb(pixelColor.R, 25, 60);
                        image1.SetPixel(x, y, newColor);
                    }
                    else if (y >= 150 && y < 300)
                    {
                        Color pixelColor = image1.GetPixel(x, y);
                        Color newColor = Color.FromArgb(pixelColor.R, 200, 100);
                        image1.SetPixel(x, y, newColor);
                    }
                    else
                    {

                        Color pixelColor = image1.GetPixel(x, y);
                        Color newColor = Color.FromArgb(pixelColor.R, 100, 210);
                        image1.SetPixel(x, y, newColor);

                    }
                }
            }


            //image1.Save(Server.MapPath(@"~\Image\xyz.jpg"), ImageFormat.Jpeg);
            image1.Save(AppDomain.CurrentDomain.BaseDirectory + "Image/xyz.jpg", ImageFormat.Jpeg);
            NewImage.ImageUrl = @"~/Image/xyz.jpg";
            Label1.Text = "Pixel format: " + image1.PixelFormat.ToString();



        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }

}

Дерево проекта

Это работает как очарование для меня. Удачи.

Другие вопросы по тегам