我想用C#获取图像不透明区域的大小

Posted

技术标签:

【中文标题】我想用C#获取图像不透明区域的大小【英文标题】:I want to use C # to get the size of the opaque area of the image 【发布时间】:2019-10-28 02:32:21 【问题描述】:

我想用C#来获取图像不透明区域的大小。但是我不知道该怎么做。请给朋友一些建议。谢谢。

【问题讨论】:

idownvotedbecau.se/noattempt - 你必须尝试 something,即使它不起作用.. SO 不是代码编写服务,也不意味着只是提供建议。这是严格的问答。 可以分析位图的像素:Color c = bmp.GetPixel(x,y);看看 c.A (alpha) 值得看看***.com/help/how-to-ask。如果你问一个好问题,你肯定更有可能得到一些好的答案。或任何答案。 一些我们需要知道的事情:什么类型的图像,大小是什么意思,不透明是什么意思? 【参考方案1】:

由于游戏项目中的图片需要语言翻译,喜欢的翻译文本可能太小看不清或不美观。所以我想写一个工具来显示翻译文本和源文本的喜欢的大小数据。主要目的是为我公司的艺人提供参考。我找到了正确的方法:

        private unsafe Region GetRegion(Bitmap bckImage)
    
        GraphicsPath path = new GraphicsPath();
        int w = bckImage.Width;
        int h = bckImage.Height;
        BitmapData bckdata = null;
        try
        
            bckdata = bckImage.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb);
            uint* bckInt = (uint*)bckdata.Scan0;
            for (int j = 0; j < h; j++)
            
                for (int i = 0; i < w; i++)
                
                    if ((*bckInt & 0xff000000) != 0)
                    
                        path.AddRectangle(new Rectangle(i, j, 1, 1));
                    
                    bckInt++;
                
            
            bckImage.UnlockBits(bckdata); bckdata = null;
        
        catch
        
            if (bckdata != null)
            
                bckImage.UnlockBits(bckdata);
                bckdata = null;
            
        
        Region region = new System.Drawing.Region(path);
        RectangleF[] rects = region.GetRegionScans(new Matrix());
        RectangleF c = RectangleF.Empty;
        for (Int32 i = 1; i < rects.Length; i++)
        
            if (i == 1)
            
                c = RectangleF.Union(rects[i - 1], rects[i]);
            
            else
            
                c = RectangleF.Union( c , rects[i]);
            
        
        path.Dispose();
        path = null;
        return region;
    

变量 c 是我想要的结果: enter image description here

实际参数如下: enter image description here 也谢谢你。希望对有疑问的人有所帮助。

【讨论】:

以上是关于我想用C#获取图像不透明区域的大小的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 调整透明图像的大小

C# 具有叠加/不透明图像的拖放效果

如何裁剪仅在透明区域显示的图像?

元素(背景图像)不透明度,但没有边框不透明度

Photoshop自动裁切,透明区域不显示

c# 自动裁剪图像