0

このメソッドに画像を渡し、その右端をフェードさせています。これは機能していましたが、突然機能しなくなりました。渡したビットマップを返しますが、変更されたピクセルは保持せず、元に戻ります。どこが間違っているのですか?

private Bitmap fadedEdge(Bitmap bmp)
{
    //img.Save("i.bmp");
    //Bitmap bmp = (Bitmap)img;
    int howfartofade = bmp.Width / 4;
    int i = 0;
    if (howfartofade > 255) i = howfartofade / 255;
    else i = 255 / howfartofade;
    if (i == 0) i = 1;
    int alp = 255;
    int counter = 0;
    for (int x = bmp.Width - howfartofade; x < bmp.Width; x++)
    {
        if (howfartofade > 255)
        {
            counter++;
            if (counter == i + 1)
            {
                alp -= 1;
                counter = 0;
            }
        }
        else
        {
            alp -= i;
        }
        for (int y = 0; y < bmp.Height; y++)
        {
            if (alp >= 0)
            {
                Color clr = bmp.GetPixel(x, y);
                clr = Color.FromArgb(alp, clr.R, clr.G, clr.B);
                bmp.SetPixel(x, y, clr);
            }
            else
            {
                Color clr = bmp.GetPixel(x, y);
                clr = Color.FromArgb(0, clr.R, clr.G, clr.B);
                bmp.SetPixel(x, y, clr);
            }
        }
    }
    return bmp;
}
4

1 に答える 1

0

私はそれを考え出した。愚かな私。画像を渡して画像を返すように変更し、渡された画像から新しいビットマップを作成しました。

private Image fadedEdge(Image input)
    {
        //img.Save("i.bmp");
        //Bitmap bmp = (Bitmap)img;
        Bitmap output = new Bitmap(input);
        int howfartofade = input.Width / 8;
        int i = 0;
        if (howfartofade > 255) i = howfartofade / 255;
        else i = (255 / howfartofade) + 1;
        if (i == 0) i = 1;
        int alp = 255;
        int counter = 0;
        for (int x = input.Width - howfartofade; x < input.Width; x++)
        {
            if (howfartofade > 255)
            {
                counter++;
                if (counter == i + 1)
                {
                    alp -= 1;
                    counter = 0;
                }
            }
            else
            {
                alp -= (i);
            }
            for (int y = 0; y < input.Height; y++)
            {
                if (alp >= 0)
                {
                    Color clr = output.GetPixel(x, y);
                    clr = Color.FromArgb(alp, clr.R, clr.G, clr.B);
                    output.SetPixel(x, y, clr);
                }
                else
                {
                    Color clr = output.GetPixel(x, y);
                    clr = Color.FromArgb(0, clr.R, clr.G, clr.B);
                    output.SetPixel(x, y, clr);
                }
            }
        }

        return output;
    }
于 2012-12-06T23:55:59.343 に答える