题
林试图通过32个像素,在中间10×10 squareish透明间隙,以产生一个小的正方形32。
这是我到目前为止有:
private Image CreatePicture(){
// Create a new Bitmap object, 32 x 32 pixels in size
Bitmap canvas = new Bitmap(32,32,System.Drawing.Imaging.PixelFormat.Format16bppRgb555);
for(int i=10;i<21;i++){
for(int p=10;p<21;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
它是一个粗暴而不会是最后的“优化版”,它只是一个粗略的演示脚本。问题是所返回的图像,而不是不透过度它只是一个灰色框:(
任何帮助理解。
迈克尔
更新: 我已经更新设置为它实际上不接受示数上运行一个Alpha RGB格式的PixelFormat脚本。现在,虽然如果我删除了“canvas.MakeTransparent(Color.Lime);”线它示出了与它的中间一个石灰框它只是显示一个灰色框的颜色为灰色的背景相同;如此看来,如果透明度得到了肯定只是不implimenting透明度!
private Bitmap CreatePicture(){
// Create a new Bitmap object, 50 x 50 pixels in size
Bitmap canvas = new Bitmap(82,82,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
for(int i=10;i<71;i++){
for(int p=10;p<71;p++){
canvas.SetPixel(i,p,Color.Lime);
}
}
canvas.MakeTransparent(Color.Lime);
// return the picture
return canvas;
}
解决方案
这取决于你打算如何使用或显示图像。 PNG和GIF是支持透明的两个文件格式。
有关的透明度的位图设置中,我使用:
Graphics.FromImage(位图).FillRectangle(Brushes.Transparent,...)设定我想为透明区域,那么我保存的文件作为一个PNG得到具有透明度的图像。
我也试过MakeTransparent方法和遇到了问题和Brushes.Transparent是我的情况工作的解决方案。
希望这给你的方向寻找到。
最后一点,我创建具有宽度和高度仅Bitmap对象,我不指定像素格式或任何这就是所谓的位图,即=新位图(宽度,高度);
其他提示
[...]Format16bppRgb555
尝试使用一些格式带有alpha通道(... RGBA)在这里。此外,如果输出将在后面是图像,确保使用的图像格式等PNG支持阿尔法频道。
您可能需要将图像格式更改为Format16bppArgb1555。
现在,您使用Format32bppArgb或Format16bppRgb555,这是每像素16位,不带alpha信息。透明度要求alpha通道或α位存在。
我不要你只是SetPixel()
到颜色.Transparent 的?相反Color.Lime的那么MakeTransparent
?正如其他人注意;您需要带有alpha通道的像素格式。
在MakeTransparent功能不工作。你有“灰色补丁”,因为你的TransparencyKey是不正确的。你会发现,如果你设置你的TransparencyKey属性到任何颜色的灰色补丁,灰色补丁确实会显示您的图片时变得透明。默认的灰色补丁我被打成颜色“控制”,或基本上是默认的Windows窗体背景颜色。改变你的TransparencyKey到无论你的灰色补丁(在我的情况下控制)和你的问题将得到解决,没有文件到硬盘neccessary的节约。干杯伴侣。