创建图像蒙版

2024-03-21

用户向我的应用程序提供了一张图像,应用程序需要从中制作一个遮罩:

对于原始图像中的每个透明像素,蒙版都包含一个红色像素。

我尝试了以下方法:

Bitmap OrgImg = Image.FromFile(FilePath);
Bitmap NewImg = new Bitmap(OrgImg.Width, OrgImg.Height);
for (int y = 0; y <= OrgImg.Height - 1; y++) {
    for (int x = 0; x <= OrgImg.Width - 1; x++) {
        if (OrgImg.GetPixel(x, y).A != 255) {
            NewImg.SetPixel(x, y, Color.FromArgb(255 - OrgImg.GetPixel(x, y).A, 255, 0, 0));
        }
    }
}
OrgImg.Dispose();
PictureBox1.Image = NewImg;

我担心慢速电脑上的性能。有更好的方法来做到这一点吗?


使用起来完全可以接受GetPixel()如果只是偶尔使用,例如加载一张图像时。但是,如果你想做更严肃的图像处理,最好直接使用位图数据 http://msdn.microsoft.com/en-us/library/System.Drawing.Imaging.BitmapData.aspx。一个小例子:

//Load the bitmap
Bitmap image = (Bitmap)Image.FromFile("image.png"); 

//Get the bitmap data
var bitmapData = image.LockBits (
    new Rectangle (0, 0, image.Width, image.Height),
    ImageLockMode.ReadWrite, 
    image.PixelFormat
);

//Initialize an array for all the image data
byte[] imageBytes = new byte[bitmapData.Stride * image.Height];

//Copy the bitmap data to the local array
Marshal.Copy(bitmapData.Scan0,imageBytes,0,imageBytes.Length);

//Unlock the bitmap
image.UnlockBits(bitmapData);

//Find pixelsize
int pixelSize = Image.GetPixelFormatSize(image.PixelFormat);

// An example on how to use the pixels, lets make a copy
int x = 0;
int y = 0;
var bitmap = new Bitmap (image.Width, image.Height);

//Loop pixels
for(int i=0;i<imageBytes.Length;i+=pixelSize/8)
{
    //Copy the bits into a local array
    var pixelData = new byte[3];
    Array.Copy(imageBytes,i,pixelData,0,3);

    //Get the color of a pixel
    var color = Color.FromArgb (pixelData [0], pixelData [1], pixelData [2]);

    //Set the color of a pixel
    bitmap.SetPixel (x,y,color);

    //Map the 1D array to (x,y)
    x++;
    if( x >= bitmap.Width)
    {
        x=0;
        y++;
    }

}

//Save the duplicate
bitmap.Save ("image_copy.png");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建图像蒙版 的相关文章

  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • Android 相机未保存在特定文件夹 [MediaStore.INTENT_ACTION_STILL_IMAGE_CAMERA]

    当我在 Intent 中使用 MediaStore INTENT ACTION STILL IMAGE CAMERA 时遇到问题 相机正常启动 但它不会将文件保存在我的特定文件夹 photo 中 但是当我使用 MediaStore ACTI
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 比较数组中的文件、从文本文件中删除行、函数、日志记录

    所以我创建了这两个数组 Approved Shares 和 Current Shares Reads Approvedshare txt and makes the txt file into an array public objFSO
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • JavaFX ImageView 未更新

    因此 我尝试将图像加载并保存到 imageView 中 其中图像的位置是通过文件浏览器选择的 我已经为此工作好几天了 如果我不能解决这个问题 我就会中风 我已经尝试了我能想到的一切 预先感谢您的帮助 UPDATED 这是我的主要课程 pub
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么

随机推荐

  • (有效)合并随机键控子集

    我有两个data tables 我想从匹配键的元素中随机将一个元素分配给另一个元素 我现在这样做的方式非常慢 让我们具体说一下 这是一些示例数据 dt1 lt data table id sample letters 1 5 500 rep
  • pandas DataFrame 多列的并排箱线图

    一年的样本数据 import pandas as pd import numpy random as rnd import seaborn as sns n 365 df pd DataFrame data A rnd randn n B
  • Chrome 开发者控制台问题

    我正在尝试测试我的网站上产生随机整数的功能 我想知道是否可以使用 chrome 开发者控制台通过代码触发按钮事件 而无需实际按下页面上的按钮 是否可以发送与用户输入文本框中的值不同的值 假设用户将他的名字输入 Tom 有没有办法通过控制台中
  • 尝试注册两个同名的ProgressBarAndroid视图

    将react版本16 0 0与react native版本0 49 1一起使用会引发红屏错误 尝试注册两个具有相同名称的ProgressBarAndroid视图 删除 ProgressBarAndroid 的所有导入和实例会产生运行良好的程
  • scikit learn:未选择所需数量的最佳功能 (k)

    我试图使用卡方 scikit learn 0 10 选择最佳特征 我首先从总共 80 个训练文档中提取 227 个特征 然后从这 227 个特征中选择前 10 个特征 my vectorizer CountVectorizer analyz
  • Hibernate 的泛型

    Hibernate 无法加载以下类 package com project alice entities import javax persistence Entity import javax persistence GeneratedV
  • 设置对话框的最大高度,然后允许滚动

    我似乎无法理解如何正确设置 jquery ui 对话框的高度 我希望它显示存在的内容的高度 但如果它超过 400 像素 那么我需要一个滚动条 因此 如果内容的高度为 200 像素 则对话框的高度应为 200 像素 如果内容的高度大于 400
  • graphviz 中跨越多行的记录

    我试图用点语言可视化一个相当复杂的结构 因为记录很大 所以我想把代码写成多行 所以而不是 A11 label A 11 Access Control A 11 1 Business requirements for access contr
  • Bash 变量替换和字符串

    假设我有两个变量 a AAA b BBB 我从文件中读取了一个字符串 该字符串如下 str a b 如何从替换变量的第一个字符串创建一个新字符串 newstr AAA BBB bash questions tagged bash多变的间接没
  • 使用 libtorrent-python 下载 Torrent

    我有以下 python 代码 import libtorrent as lt import time ses lt session ses listen on 6881 6891 params save path home download
  • iOS 15 TabView导航栏透明度问题

    新的 iOS 15 使导航栏背景完全透明 如果后面没有元素 如果有一个列表并且您将元素滚动到导航栏后面 这将获得白色半透明背景 但如果我使用 TabView 其中每个 TabItem 都有一个在选项卡项目之间切换时 导航栏背景内的列表未正确
  • 如何在bash中找到字符串中最后分组的数字

    这是一个后续问题this https stackoverflow com q 51923800 10247894问题 关于如何知道字符串中分组数字的数量 In bash 如何找到字符串中最后一次出现的一组数字 所以 如果我有 string
  • Xamarin 表单(跨平台):ListView 中的多种类型的单元格

    I am new to Xamarin I have a requirement where I have to implement a ListView or say tableView that have multiple differ
  • TortoiseGit 使用不正确的 SSH 密钥

    我现在有一个关于乌龟git的奇怪问题 我无法弄清楚 当尝试提交到 github 上的存储库时 出现错误 错误 对 key2 的 martindevans Hermes git 权限被拒绝 Key2 是我用来访问不同 github 存储库的密
  • 我可以一成不变地借用 self 来实现 self.callbacks: Vec> 吗?

    pub struct Notifier lt a T gt callbacks Vec
  • 如果启用了热模块替换,为什么在更改 HTML 时 LiveReload 在 Webpack 中不起作用?

    如果你设置hot true in the devServer设置在Webpack 那么模块热更换CSS 有效 并且无需重新加载完整页面即可应用更改 但是当改变HTML文件时 实时重载由于某种原因不起作用 您需要手动刷新页面才能应用更改 If
  • 'Object.ReferenceEquals' 始终为 false,因为它是使用值类型调用的

    当我使用slSvcUtil exe要创建我的服务客户端文件 我看到如下代码 private string CategoryField System Runtime Serialization DataMemberAttribute publ
  • 如何使用 Python 中的 DLL 文件?

    最简单的使用方法是什么DLL从内部归档Python 具体来说 如何做到这一点without编写任何附加包装器C 向其公开功能的代码Python Native Python与使用第三方库相比 功能更受青睐 为了方便使用 ctypes http
  • 如何解决 CoUnitialize() 上挂起的进程?

    我有一个本机 Visual C NT 服务 当服务启动时 它的线程调用CoInitialize 它将线程附加到 STA 服务线程通过 COM 接口使用 MSXML 当服务接收到SERVICE CONTROL STOP它在消息队列中发布一条消
  • 创建图像蒙版

    用户向我的应用程序提供了一张图像 应用程序需要从中制作一个遮罩 对于原始图像中的每个透明像素 蒙版都包含一个红色像素 我尝试了以下方法 Bitmap OrgImg Image FromFile FilePath Bitmap NewImg