如何填充透明像素的tiff文件,并保持地理信息



我想用黑色填充包含大地测量信息(地图)的tif文件的透明像素。例如,当我用photoshop打开文件时,我没有看到透明像素,但是当我用Geodetic system打开它为"ArcMap"时,我可以注意到一些像素是透明的。这就是我要做的:

private void button1_Click(object sender,EventArgs e)
{
    Bitmap bmp=null; 
    using(Image img =Image.FromFile(@"filelocation.tif")
    {
        bmp=new Bitmap(img);
        for(int y=0;y<bmp.Height;y++)
        {
            for(int x=0; x<bmp.Width;x++)
            {
                if(bmp.GetPixel(x,y).A!=255)
                {
                    bmp.SetPixel(x,y,Color.Black);
                }
            }   
        }
    }
}
bmp.save(@"new file location ");

结果:

1)像素数相同,但图像的大小却小得多,为什么?

2)我在bmp文件上尝试了条件(Getpixel(x,y) a !=255),它检测到了透明像素,但是当我在tif文件上执行该方法时,它没有检测到透明像素,为什么?

3)如果我在824位图像上执行此方法,它将其转换为24位压缩图像,为什么会发生这种情况?

4)当我执行这个方法时,所有的大地测量信息都消失了,因此地图不再是地图,而是一个没有大地测量信息的文件。我可以执行一种方法,只填充传输像素而不生成一个新文件吗?(为了保持大地测量信息)

5)虽然我保存的文件在tif格式,当我看的tif数据(与一个工具称为displayheader表示有关文件的信息),它似乎转换为png文件的格式…为什么会这样?谢谢!

private void button1_Click(object sender,EventArgs e)
{
    Bitmap bmp=null; 
    using(Image img =Image.FromFile(@"filelocation.tif")
    {
        bmp=new Bitmap(img);
        bmp.MakeTransparent();
        for(int y=0;y<bmp.Height;y++)
        {
            for(int x=0; x<bmp.Width;x++)
            {
                if(bmp.GetPixel(x,y).A!=255)
                {
                    bmp.SetPixel(x,y,Color.Black);
                }
            }   
        }
    }
}
bmp.save(@"new file location ");

请添加bmp.Maketransparent()函数,它将使位图图像透明

最新更新