2

我试图生成一个 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;
}
4

5 回答 5

3
[...]Format16bppRgb555

尝试在此处使用带有 Alpha 通道 (...Rgba) 的某种格式。此外,如果稍后输出图像,请确保使用支持 Alpha 通道的图像格式,例如 PNG。

于 2009-03-13T20:38:13.497 回答
2

这取决于您将如何使用或显示图像。PNG 和 Gif 是支持透明度的两种文件格式。

对于透明度的位图设置,我使用:

Graphics.FromImage(bitmap).FillRectangle(Brushes.Transparent, ...) 将我想要的区域设置为透明,然后我将文件保存为 PNG 以获得具有透明度的图像。

我还尝试了 MakeTransparent 方法并遇到了问题,而 Brushes.Transparent 是适合我情况的解决方案。

希望这能给你一个研究方向。

最后一点,我只创建了具有宽度和高度的位图对象,我没有指定像素格式或所谓的任何内容,即 bitmap = New Bitmap(width, height);

于 2009-03-13T20:38:24.260 回答
1

您可能需要将图像格式更改为 Format16bppArgb1555。

现在,您使用的是 Format32bppArgb 或 Format16bppRgb555,它是每像素 16 位,没有 alpha 信息。透明度要求存在 Alpha 通道或 Alpha 位。

于 2009-03-13T20:38:14.933 回答
0

我不只是SetPixel()为了Color.Transparent吗?而不是 Color.LimeMakeTransparent呢?正如其他人所指出的那样;您需要带有 Alpha 通道的像素格式。

于 2009-03-14T00:59:29.640 回答
0

MakeTransparent 函数确实有效。您有“灰色补丁”,因为您的 TransparencyKey 不正确。您会发现,如果您将 TransparencyKey 属性设置为灰色补丁的任何颜色,当您的图像显示时,灰色补丁确实会变得透明。我得到的默认灰色补丁在颜色上被标记为“控制”,或者基本上是默认的 Windows 窗体背景颜色。将您的 TransparencyKey 更改为您的灰色补丁(在我的情况下为 Control),您的问题将得到解决,无需将文件保存到硬盘驱动器。队友的欢呼声。

于 2009-04-08T00:26:04.887 回答