我想用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#获取图像不透明区域的大小的主要内容,如果未能解决你的问题,请参考以下文章