在c#中用指针操作图片像素点
在Bitmap类中有两个函数SetPixel,GetPixel,分别用来设置或读取图片中指定点的颜色(这里发现了VS的一个错误,SetPixel的文档说明写的是“获取颜色”??)。
当要对一幅图进行相当操作时,用这两个函数,性能上就不尽人意了……这时就可以考虑用指针来对性能进行提升。
这里介绍两种方法:
一、
1public struct Pixel
2{
public byte B; //
public byte G; //
public byte R; //
6}
8public void ReadColor()
9{
Bitmap b=new Bitmap("d:\\a.bmp");
BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite , PixelFormat.Format24bppRgb);
unsafe
{
Pixel* p = null;
for (int x = 0; x < b.Width; x++)
{
p = (Pixel*)bData.Scan0 + x * b.Height;
for (int y = 0; y < b.Height; y++)
{
int R = p->R;
int G = p->G;
int B = p->B;
//这里获取颜色分量的各个值,同样在这里还可以对其进行赋值
}
}
}
b.UnlockBits(bData);
28}
二:
//这里的x,y参数,指的是图像中像素点的x,y坐标
pubic void ReadColor(int x,int y)
{
Bitmap b = new Bitmap("d:\\a.bmp");
BitmapData bData = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadWrite,
PixelFormat.Format24bppRgb);
unsafe {
byte* color = (byte*)bData.Scan0 + x * 3 + y * Data.Stride;
int R = *(color + 2);
int G = *(color + 1);
int B = *color;
//同样在这里也可以对其行进修改
}
b.UnlockBits(bData);
}
通过以上的代码可以很容易的知道怎么指针来操作像素点。
这里要说明的是,第一种方法中的x,y不能和图像中坐标进行对应(特别要注意),如果对一幅图的每个点都进行同样的操作可以考虑第一种方法。但要对某些特定坐标上的点进行操作那就只能用第二种方法了。
在c#中用指针操作图片像素点的更多相关文章
- ASP.NET MVC 网站开发总结(七)——C#操作图片:多张图的拼接(旋转)
		
其实用C#来操作图片的拼接就是在用Graphic画图.个人感觉还是挺有趣的,各种类库提供了丰富多彩的功能. 源代码(移植到一个简单的C#程序中,并没有放在ASP.NET项目中): using Syst ...
 - C#指针操作Marshal实例
		
static void Main(string[] args) { ,,,}; ,,,}; IntPtr pt = Marshal.AllocHGlobal(a.Length); //从source数 ...
 - Java操作图片的工具类
		
操作图片的工具类: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.a ...
 - 【译】在Asp.Net中操作PDF – iTextSharp - 操作图片
		
原文 [译]在Asp.Net中操作PDF – iTextSharp - 操作图片 作为我的iTextSharp系列的文章的第七篇,开始探索使用iTextSharp在PDF中操作图片,理解本篇文章需要看 ...
 - C语言指针操作
		
欢迎访问我的新博客:http://www.milkcu.com/blog/ 原文地址:http://www.milkcu.com/blog/archives/pointer-manipulation. ...
 - Day4:T1小技巧(类似于指针操作)T2搜索+小细节
		
Day4:其中有很多小技巧get T1 一直没有听到过像这样的小技巧的略专业名词,有点类似于指针操作,之前有碰到过很多这样的题目 每次都是以不同的形式出现,但是感觉思想还是有点接近的吧(就比如某天有一 ...
 - C语言数组操作和指针操作谁更高效
		
在上一篇博文 代码优化小技巧(持续更新......) 第三条关于数组和指针谁更高效, 意犹未尽, 决定单独拉出一篇来讲 1. 数组和指针操作对比 #include <stdio.h> i ...
 - C# 指针操作相关
		
C# 指针操作相关 ========================================= // ** 取int 地址 以指针访问指向值 ** // ...
 - 在Android下通过ExifInterface类操作图片的Exif信息
		
什么是Exif 先来了解什么是Exif.Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.I ...
 
随机推荐
- redis 学习笔记(4)-HA高可用方案Sentinel配置
			
上一节中介绍了master-slave模式,在最小配置:master.slave各一个节点的情况下,不管是master还是slave down掉一个,“完整的”读/写功能都将受影响,这在生产环境中显然 ...
 - Jboss EAP:native management API学习
			
上一节已经学习了CLI命令行来控制JBOSS,如果想在程序中以编码方式来控制JBOSS,可以参考下面的代码,实际上在前面的文章,用代码控制Jboss上的DataSource,已经有所接触了,API与C ...
 - c++ 头文件
			
可以将程序分为二部分: 头文件:包含结构声明和使用这些结构的函数的原型 源代码文件: 包含与结构有关的函数的代码 不要将函数的定义或变量的声明放在头文件里, 一般头文件可以包含以下内容 >函数原 ...
 - opencv4-highgui之视频的输入和输出以及滚动条
			
这是<opencv2.4.9tutorial.pdf>的highgui的三个例子.通过简短的介绍来实现不同函数的理解,省去一些不需要说的东西. 一.增加滑动条 这是opencv中为数不多的 ...
 - ul、li实现横向导航按钮
			
好久没写博客了,主要是懒得呼气都不想呼,上周分给我一个新的任务,就是自己新建一个系统,快速极限开发,虽然之前自己也做过小的系统,但毕竟是自己做,随着自己的心意做,没有做其他的限制等,现在呢是给公司做, ...
 - linux命令行安装使用KVM
			
一.说明 本篇文章介绍的是基于centos环境来安装的,ip地址192.168.4.233 二.检查CPU是否支持虚拟技术 egrep 'vmx|svm' /proc/cpuinfo 如果有输出内容表 ...
 - ServiceStack 概念参考文摘
			
摘自:http://www.cnblogs.com/woxpp/p/5010881.html ServiceStack 用于服务开发,可以为各种形式的网站.软件.APP等提供数据服务,可以提供REST ...
 - [BZOJ3875][AHOI2014]骑士游戏(松弛操作)
			
题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3875 分析: 类似于spfa求最短路,设d[i]表示完全消灭i号怪物的最小花费,我们对 ...
 - jQuery基础--样式篇(1)
			
1.jQuery简介:JQuery是继prototype之后又一个优秀的Javascript库.它是轻量级的js库 ,它兼容CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari ...
 - Android Studio2.0 教程MAC版 -快捷键篇
			
本文转至 Android Studio2.0 教程从入门到精通MAC版 - 提高篇 ( OPEN 开发经验库) 第二篇我们开发了一个Hello World应用,并介绍Android Sutdio的界面 ...