- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实用标准文案
精彩文档
#中使用lockbits方法处理图像(译文)
?(2007-08-28 20:23:31)
HYPERLINK javascript:; 转载▼
标签:?
HYPERLINK /?c=blogq=%D6%AA%CA%B6%2F%CC%BD%CB%F7by=tag \t _blank 知识/探索
分类:? HYPERLINK /s/articlelist_1312697572_5_1.html \t _blank 程序设计
??使用lockbits方法处理图像
????许多图像处理任务即时是最简单的文件类型转换,例如从32位深度到8位深度的格式转化,直接获得像素阵列要比使用GetPixel和SetPixel等方法的效率高得多。
????你可能会发现DotNet采用托管机制,大多数情况下微软会推荐你使用托管代码,理由是便捷和安全。实际应用中,直接操作内存中的数据块是很少见的,尽管如此,图像处理恰恰是这类为数不多的情况之一,因为使用托管代码的效率低的难以忍受,特别是对巨幅图像来说,在此,我们讨论一下一种新的方法。
?????如何使用非托管代码是因语言而异的,在C#中我们可以通过unsafe关键字来调用指针,从而直接操作内存中的位图数据;VB则使用Marshal类中的方法,它会导致一部分的性能损失,因此效率不如前者。
?
锁定比特流
????Bitmap类使用LockBits和UnLockBits方法来将位图的数据矩阵保存在内存中、直接对它进行操作,最后用修改后的数据代替位图中的原始数据。LockBits返回以各BitmapData的类用已描述数据在已锁定的矩阵中的位置和分布。
????BitmapData类包括以下几个重要的属性:
Scan0:数据矩阵在内存中的地址。
Stride:数据矩阵中的行宽,以byte为单位。可能会扩展几个Byte,后面会介绍。
PixelFormat:像素格式,这对矩阵中字节的定位很重要。
Width:位图的宽度。
Height:位图的高度。
???具体关系见下图:
?
????如上图所示,stride属性表示位图数据矩阵的行宽,以byte为单位。出于效率考虑,矩阵的行宽并非刚好是每行像素数的整数倍,系统往往会将其封装成4的整数倍。举例来说,对于一幅24位深17像素宽的图像,其stride属性为52;每行的数据量为17*3=51,系统将其自动封装一个字节,所以它的stride为52byte(或13*4byte)。对于一幅17像素宽的4位索引图,其stride为12,其中9byte(准确地说是8.5个byte)用来记录数据信息,每行再自动添加3(3.5)个byte保证其为4的整数倍。
????具体数据的分布因其pixel format而异。24位深的图像每隔3个byte包含一组RGB信息;32位深的图像每隔4个byte包含一组RGBA信息。那些每个字节包含多个像素的pixel format,比如4位索引图像或1位索引图像,必须经过仔细处理,从而保证同一字节中的相邻byte不会混淆。
指针的准确定位
32位RGB:假设X、Y为位图中像素的坐标,则其在内存中的地址为scan0+Y*stride+X*4。此时指针指向蓝色,其后分别是绿色、红色,alpha分量。
24位RGB:scan0+Y*stride+X*3。此时指针指向蓝色,其后分别是绿色和红色。
8位索引:scan0+Y*stride+X。当前指针指向图像的调色盘。
4位索引:scan0+Y*stride+(X/2)。当前指针所指的字节包括两个像素,通过高位和低位索引16色调色盘,其中高位表示左边的像素,低位表示右边的像素。
1位索引:scan0+Y*stride+X/8。当前指针所指的字节中的每一位都表示一个像素的索引颜色,调色盘为两色,最左边的像素为8,最右边的像素为0。
像素间使用迭代器
????下面这个范例将一幅32位深的图像中所有像素的蓝色分量设为最大(255):
????BitmapData bmd=bm.LockBits(new?Rectangle(0, 0, 10, 10),???System.Drawing.Imaging.ImageLockMode.ReadOnly, bm.PixelFormat);
??????int PixelSize=4;
?
??????for(int y=0; ybmd.Height; y++)
??????{
????????byte* row=(byte *)bmd.Scan0+(y*bmd.Stride);
????????for(int x=0; xbmd.Width; x++)
????????{
??????????row[x*PixelSize]=255;
????
您可能关注的文档
- 【述评】严重脓毒症免疫调节治疗:从免疫抑制走向免疫增强.doc
- 3李素芝——雪域门巴将军.doc
- 15春东财《审计学概论》在线作业二.doc
- 51CTO学院-大数据恢复学习视频课程.doc
- 2013年行政法与行政诉讼法测试地的题目.doc
- 2014团队合作能力与创新团队建设读本.doc
- 2014一级考试模拟地的题目2.doc
- 2015浙江学业水平测试生物.doc
- 2016地的工程咨询继续教育地的工程项目的社会评价与衡量与衡量方法答卷89分.doc
- 2016民用无人机发展前景及地的应用领域分析报告材料.doc
- 2024年江西省高考政治试卷真题(含答案逐题解析).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)物理试卷(含答案详解).pdf
- 2025年四川省新高考八省适应性联考模拟演练(二)地理试卷(含答案详解).pdf
- 2024年内蒙通辽市中考化学试卷(含答案逐题解析).docx
- 2024年四川省攀枝花市中考化学试卷真题(含答案详解).docx
- (一模)长春市2025届高三质量监测(一)化学试卷(含答案).pdf
- 2024年安徽省高考政治试卷(含答案逐题解析).pdf
- (一模)长春市2025届高三质量监测(一)生物试卷(含答案).pdf
- 2024年湖南省高考政治试卷真题(含答案逐题解析).docx
- 2024年安徽省高考政治试卷(含答案逐题解析).docx
最近下载
- 2024年河北省高考英语试卷(含答案解析).docx
- 特色办学建设规划及实施方案.doc VIP
- 惠州市2024届高三第三次调研考试(三调)语文试卷(含答案).pdf
- 2021年农产品商贸流通专业群人才培养方案(高职).pdf
- 热血三国秒墙计算器.pdf VIP
- 教育调查与研究报告大学.docx VIP
- 《急诊与灾难医学》第十章 急性中毒.pptx
- 2024年高考真题和模拟题英语分类汇编:专题10 完形埴空(新高考15空) (原卷版) (全国通用).docx VIP
- 大唐国际胜利东二号露天煤矿采场边坡稳定性分析-采矿工程专业论文.docx
- 2024年新入职护士培训考试题库资料800题(含答案).pdf
文档评论(0)