我试图生成一个32 x 32像素的小方块,中间有一个10 x 10方形的透明间隙。
这是我到目前为止所做的:
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;
}
它很粗糙,不会成为最终的“优化版本”,它只是一个粗略的演示脚本。问题是返回的图像不透明,而只是一个灰色框:(。
任何帮助表示感谢。
迈克尔
更新: 我已经将PixelFormat设置为Alpha RGB格式更新了脚本,它实际上在运行时没有错误地接受。现在虽然我删除了“canvas.MakeTransparent(Color.Lime);”它在中间显示一个石灰盒,它只显示一个与灰色背景颜色相同的灰色框;所以似乎透明度被认可,只是没有暗示透明度!
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;
}
答案 0 :(得分:3)
[...]Format16bppRgb555
尝试在此处使用带有Alpha通道(... Rgba)的格式。此外,如果输出将是以后的图像,请确保使用支持Alpha通道的PNG等图像格式。
答案 1 :(得分:2)
这取决于您将如何使用或显示图像。 PNG和Gif是支持透明度的两种文件格式。
对于透明度的位图设置,我使用了:
Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent,...)将我想要的区域设置为透明,然后我将文件保存为PNG以获得具有透明度的图像。
我也尝试过MakeTransparent方法并遇到问题,而Brushes.Transparent是适合我情况的解决方案。
希望这能为您提供一个方向。
最后一点,我创建了仅具有宽度和高度的Bitmap对象,我没有指定像素格式或任何被调用的内容,即bitmap = New Bitmap(width,height);
答案 2 :(得分:1)
您可能需要将图像格式更改为Format16bppArgb1555。
目前,您使用的是Format32bppArgb或Format16bppRgb555,每像素16位,没有alpha信息。透明度要求存在alpha通道或alpha位。
答案 3 :(得分:0)
我不是SetPixel()
到Color.Transparent吗?而不是Color.Lime然后MakeTransparent
?正如其他人所指出的那样;你需要一个带alpha通道的像素格式。
答案 4 :(得分:0)
MakeTransparent功能确实有效。您有“灰色补丁”,因为您的TransparencyKey不正确。您会发现,如果将TransparencyKey属性设置为灰色色块的任何颜色,则在显示图像时,灰色色块确实会变为透明。我得到的默认灰色补丁标记为“控制”颜色,或基本上默认的Windows窗体背景颜色。将您的TransparencyKey更改为您的灰色补丁(在我的情况下为Control),您的问题将得到解决,无需将文件保存到硬盘驱动器。干杯队友。