1

キャンバスから画像を分割して、背景をそのままにしておくことができるのが好きです。結果は、以下のImageB.png(白い領域は透明)のようになります。以下に記述したコードは、asp.net C#Webフォームにあります。

ImageA.png(背景のある画像)

ImageA(背景のある画像)

ImageB.png(女性の画像、白い部分は透明にする必要があります)

画像が背景から削除されました

ASP.NET C#Webフォームコード。

  protected void Page_Load(object sender, EventArgs e)
    {
        //Load image
        Bitmap loadImage = new Bitmap(Server.MapPath("ImageA.png"));
        //Create a canvas to work on
        Bitmap canvas = new Bitmap(loadImage.Width, loadImage.Height);
        // create graphic on canvas
        Graphics graphicOnCanvas = Graphics.FromImage(canvas);
        graphicOnCanvas.DrawImage(loadImage, 0, 0, loadImage.Width, loadImage.Height);//Draw the graphic to the canvas

        //*****REMOVE IMAGE FROM BACKGROUND ?????????????????????? ********/


        #region Output image on screen
        MemoryStream msOut = new MemoryStream();
        canvas.Save(msOut, ImageFormat.Png);//must leave as png to output as png
        canvas.Dispose();//Dispose the canvas
        Byte[] BitmaptoBytes = msOut.ToArray();
        //convert bitmapholder to byte[] - ended
        BitmaptoBytes = null;
        Response.ClearHeaders();
        Response.ContentType = "image/png";//to product a better jpeg we have to use this because event if using the codec to do it it still doesn't look good http://msdn.microsoft.com/en-us/library/aa479306.aspx
        //disable 1 line below to prevent download from viewing
        // Response.AddHeader("Content-Disposition", "attachment; filename=" + ProductImage.Substring(0, ProductImage.Length - Reverse(ProductImage).Split('.')[0].Length-1) + ".png");//changing the file name extension
        Response.AddHeader("Content-Length", msOut.Length.ToString());
        msOut.WriteTo(Response.OutputStream);//Sending image out
        Response.End();
        loadImage.Dispose();
        #endregion
    }
4

1 に答える 1

1

おそらく、( WriteableBitmapを使用して) 各ピクセルを調べて、現在のピクセルが「背景」ピクセルであるかどうかを判断し (正確な「ファジー」一致またはアルファ テストでこれを行うことができます)、それを白に置き換える必要があります。またはあなたが望む他の色。

WriteableBitmap内のすべてのピクセルにアクセスする方法は次のとおりです。

于 2012-09-05T17:43:48.797 に答える