在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 ...
随机推荐
- QT 文件操作
QT提供了QFile类用于文件读写 QFile可以读写文本文件,也可以读写二进制文件 #include "widget.h" #include <QGridLayout> ...
- OkHttp使用教程
Android系统提供了两种HTTP通信类,HttpURLConnection和HttpClient.关于HttpURLConnection和HttpClient的选择>>官方博客尽管Go ...
- JavaScript系列:计算一个结果为30的加法智力题
用下面这段JavaScript代码可以计算出来 function findTheThreeNum(numFix) { var a = ["1", "3", &q ...
- 金山快盘+TortoiseSVN构建版本控制仓库
金山会盘+TortoiseSVN构建版本控制仓库 之前写过一篇文章介绍 如何利用花生壳和VisualSVN Server建立远程代码仓库,具体请参照: <如何利用花生壳和VisualSVN Se ...
- Theano2.1.5-基础知识之打印出theano的图
来自:http://deeplearning.net/software/theano/tutorial/printing_drawing.html Printing/Drawing Theano gr ...
- 20160803 - C:\WINDOWS\system32\config\systemprofile\Desktop 不可用的解决
问题:某些软件在从注册表读取用户桌面地址时,欠考虑的%USERPROFILE%的情况,例如迅雷打开文件时,会提示: [Window Title]位置不可用 [Content]C:\WINDOWS\sy ...
- SQLite安装、编译与应用
什么是 SQLite SQLite是一款轻量级的.基于文件的嵌入式数据库,实现自包容.零配置.支持事务的SQL数据库引擎.与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下, ...
- springmvc整合fastjson
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- java中的URLConnection
*URLConnection是个抽象类,它有两个直接子类分别是HttpURLConnection和JarURLConnection.另外一个重要的类是URL,通常URL可以通过传给构造器一个Strin ...
- NumPy 上手一个例子 vectorsum.py
NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(nested list structure)结构要高效的多(该结构也可以用来表示矩 ...