我已经在c#中编辑了一个位图,并且对于每个像素,如果条件为真,我将其更改为某种颜色,否则我将颜色设置为Color.Transparent(操作使用getPixel / setPixel完成) 。我以.png格式导出图像,但图像不透明。任何想法为什么或如何做?
此致 Alexandru Badescu
这是代码: - 这里我加载图像并转换为PixelFormat.Format24bppRgb,如果png
m_Bitmap =(Bitmap)Bitmap.FromFile(openFileDialog.FileName,false);
if(openFileDialog.FilterIndex==3) //3 is png
m_Bitmap=ConvertTo24(m_Bitmap);
- 这是用于在矩阵中的某个位置之后更改像素
for(int i = startX; i< endX; i ++)
for (int j = startY; j < endY; j++)
{
if (indexMatrix[i][j] == matrixFillNumber)
m_Bitmap.SetPixel(j, i, selectedColor);
else
m_Bitmap.SetPixel(j, i, Color.Transparent);
}
答案 0 :(得分:5)
因为pixelformat。 以下是您的示例代码:
Bitmap inp = new Bitmap("path of the image to edit");
Bitmap outImg = new Bitmap(inp.Width, inp.Height, PixelFormat.Format32bppArgb);
outImg.SetResolution(inp.HorizontalResolution, inp.VerticalResolution);
Graphics g = Graphics.FromImage(outImg);
g.DrawImage(inp, Point.Empty);
g.Dispose();
inp.Dispose();
////
// Check your condition and set pixel here (outImg.GetPixel, outImg.SetPixel)
////
outImg.Save("out file path", ImageFormat.Png);
outImg.Dispose();
这是需要对当前代码进行最少更改的代码。 但我建议你查看LockBits方法以获得更好的性能: http://msdn.microsoft.com/en-us/library/5ey6h79d.aspx
答案 1 :(得分:0)
我需要更多的代码来验证,但我最好的猜测是你首先在位图上写一些东西来清除它(比如用白色填充它),然后用Color.Transparent
制作透明像素在上面。这将无法正常工作,因为白色(或其他任何)透明顶部仍为白色。
答案 2 :(得分:0)
如果你在代码中创建了一个位图,它很可能是24位,并且不支持alpha混合/透明。
提供创建代码,我们应该能够提供帮助。