C#允许通过不安全指针实现像C++一样操作指针,这个速度是最快的。下面这个例子是修改一幅RGB图像的每个像素值,速度很快,测试一张2592*1944的彩色图像,只需要几ms就能够全部遍历。

        /// <summary>
/// 操作彩色图像
/// </summary>
/// <param name="bitmap"></param>
private void GetRBBytes(Bitmap bitmap)
{
if (bitmap != null)
{
int width = bitmap.Width;
int height = bitmap.Height;
int length = height * 3 * width;
BitmapData data = bitmap.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);//将图像放入内存
System.IntPtr Scan0 = data.Scan0;//获取指针头
int stride = data.Stride;//获取图像跨距宽度
int Tempcount = 0;
unsafe
{
byte* p = (byte*)Scan0;//获取首个图像像素的地址
int offset = stride - width * 3;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++)
{
p[0] = (byte)20;//B
p[1] = (byte)73;//G
p[2] = (byte)100;//R
}
p += offset;
}
count = Tempcount;
}
bitmap.UnlockBits(data);
this.pb_imageRgb.Image = bitmap;
}
}

C#使用不安全指针来操作bitmap的更多相关文章

  1. [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888

    [Android]通过JNI访问并操作Bitmap的元素,支持RGB565和ARGB8888 标签: androidbitmapjni 2014-05-09 20:35 2985人阅读 评论(1) 收 ...

  2. memmove 对同一个指针不操作

    memmove 对同一个指针不操作,所以调用memmove之前不用比较两个指针是否相同 void CTestDLLDlg::OnBnClickedButton6() { ; char* data = ...

  3. 对二维数组使用指针进行操作的探索(C语言)

    /* Name: 对二维数组使用指针进行操作的探索 Copyright: Author: lingr7 Date: 01/12/18 11:55 Description: */ #include< ...

  4. PHP中使用数组指针函数操作数组示例

    数组的内部指针是数组内部的组织机制,指向一个数组中的某个元素.默认是指向数组中第一个元素通过移动或改变指针的位置,可以访问数组中的任意元素.对于数组指针的控制PHP提供了以下几个内建函数可以利用. ★ ...

  5. C使用FILE指针文件操作

    文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名.实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件 ...

  6. C++指针的操作和运算(转)

    既然指针是一种数据类型,那么它也应该有对应的操作或运算,正如整数能做加减乘除一样.但是每一种操作或运算都应该对这种数据类型有意义.比如两个实数可以用关系运算得知哪个大哪个小,而两个虚数却不能使用关系运 ...

  7. Python基础笔记系列十一:标准输入输出、文件读写和指针等操作

    本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 标准输入输出一.输入 在sublime中这个时候需要安装SublimeRE ...

  8. 使用offsetof对结构体指针偏移操作

    题目来自于COMP20003 Tutorial 2: Program m ing Challenge 2.2 The technology stack at Hidebound Inc. uses a ...

  9. c语言中如何通过二级指针来操作二维数组

    通过二级指针去访问二维数组需要先给二级指针分配等同于二维数组行数的一维数组指针,然后把二维数组的每行首地址赋值给对应位置的一维指针上.之后就可以通过二维指针直接访问了. 参考代码如下,可以看具体注释辅 ...

随机推荐

  1. MongoDB,入门看这一篇足矣!

    一.介绍 在介绍 MongoDB 之前,我先介绍一下业务开发的时候遇到的痛点,以便大家对它有一个更加清晰的认识! 最近在用数据库存储数据的时候发现这么一个坑,例如从消息队列中监听消息的时候,原来的做法 ...

  2. DIN 66025标准下G Code基础代码释义

    基础/前提 XYZ指示常规的三个轴号,PQUVW为可以增加的五个轴,ABC为可以增加的旋转轴 实例 G0 快速定位(点位运动) G1 直线运动(插补) G2 顺时针圆弧运动(插补) G3 逆时针圆弧运 ...

  3. Group 和 Distinct 列的次序影响查询性能

    目录 一.概述 二.work_mem 满足排序情况 1.Distinct 语句 2.Group by 语句 三.work_mem 不满足排序情况 1.Distinct 语句 2.Group by 语句 ...

  4. Spark 写 Hbase

    package com.grady import org.apache.hadoop.hbase.HBaseConfiguration import org.apache.hadoop.hbase.c ...

  5. Java 函数式编程

    由 JS 转 Java,写惯了 React,习惯了函数式,因此转 Java 时也是先学函数式. 语法糖「Syntactic Sugar」 起初,Java 的函数式看起来是匿名类的一个语法糖. Stre ...

  6. 使用Elasticsearch Operator快速部署Elasticsearch集群

    转载自:https://www.qikqiak.com/post/elastic-cloud-on-k8s/ 随着 kubernetes 的快速发展,很多应用都在往 kubernetes 上面迁移,现 ...

  7. Kubernetes DevOps: Tekton

    Tekton 是一款功能非常强大而灵活的 CI/CD 开源的云原生框架.Tekton 的前身是 Knative 项目的 build-pipeline 项目,这个项目是为了给 build 模块增加 pi ...

  8. kubectl top命令

    kubectl top命令可显⽰节点和Pod对象的资源使⽤信息,它依赖于集群中的资源指标API来收集各项指标数据.它包含有node和pod两个⼦命令,可分别⽤于显⽰Node对象和Pod对象的相关资源占 ...

  9. redhat替换yum源时redhat.repo无法删除或禁用的问题

    rhel7.3系统,在替换自带的repo源时发现无论是将redhat.repo重命名还是删除,在执行yum命令后总是自动又生成redhat.repo得问题,导致替换的CentOS-Base.repo, ...

  10. SC命令---安装、开启、配置、关闭windows服务 bat批处理

    一.直接使用cmd来进行服务的一些操作 1.安装服务 sc create test3 binPath= "C:\Users\Administrator\Desktop\win32srvDem ...