我正在从包含中心透明区域的文件中读取图像(帧图像类型)。
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;
}
无论我尝试什么,我似乎无法解决这个问题......
答案 0 :(得分:0)
我发现了这个问题,相关的是,在调整图像大小后,边框似乎有一些透明像素..(如Alpha 150)所以边框不是ALPHA 255 .. 我做了什么我用
更改了函数GetBorderWidth代码while(bmp.GetPixel(sz.Width,hy).A&gt; 10&amp;&amp; sz.Width&lt; hx) sz.Width ++;
它似乎解决了这个问题。 谢谢大家让我知道要检查什么。