删除图像大小后透明度 - gdi +

时间:2015-06-24 08:18:03

标签: c# .net gdi+

我正在从包含中心透明区域的文件中读取图像(帧图像类型)。

 Image myFrame = Image.FromFile("d:\mypngfile.png");

我调用图像调整大小后的客户功能:

myFrame = resizeImage(myFrame, new Size(otherbmp.Width, otherbmp.Height));

问题是在重新调整图像后,似乎透明度被移除了。

调整大小功能:

 public Image resizeImage(Image imgToResize, Size size)
    {
        int sourceWidth = imgToResize.Width;
        int sourceHeight = imgToResize.Height;
        float nPercent = 0;
        float nPercentW = 0;
        float nPercentH = 0;
        nPercentW = ((float)size.Width / (float)sourceWidth);
        nPercentH = ((float)size.Height / (float)sourceHeight);
        if (nPercentH < nPercentW)
            nPercent = nPercentH;
        else
            nPercent = nPercentW;
        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);
        Bitmap b = new Bitmap(destWidth, destHeight,PixelFormat.Format32bppArgb);
        b.MakeTransparent();
        Graphics g = Graphics.FromImage((Image)b);
        g.CompositingQuality = CompositingQuality.HighQuality;
        g.CompositingMode = CompositingMode.SourceOver;
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;
        g.SmoothingMode = SmoothingMode.AntiAlias;
        g.PixelOffsetMode = PixelOffsetMode.HighQuality;
        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
        g.Dispose();
        return (Image)b;
    }

我检查调整大小后不起作用的alpha像素(在调整大小之前它确实有效并返回值)。它总是返回0!

  public int GetBorderWidth(Bitmap bmp)
            {
                var hy = bmp.Height/ 2;


                while (bmp.GetPixel(0, hy).A == 255 && sz.Width < hx)
                    sz.Width++;

                 return sz.width;
             }

无论我尝试什么,我似乎无法解决这个问题......

1 个答案:

答案 0 :(得分:0)

我发现了这个问题,相关的是,在调整图像大小后,边框似乎有一些透明像素..(如Alpha 150)所以边框不是ALPHA 255 .. 我做了什么我用

更改了函数GetBorderWidth代码
  

while(bmp.GetPixel(sz.Width,hy).A&gt; 10&amp;&amp; sz.Width&lt; hx)                   sz.Width ++;

它似乎解决了这个问题。 谢谢大家让我知道要检查什么。