• C# 指针操作图像


        Bitmap bmp01;

                int BmpWidth = bmp01.Width;
                int BmpHeight = bmp01.Height;
                PixelFormat BmpPixelFormat = bmp01.PixelFormat;

                byte* RBuff = (byte*)Marshal.AllocHGlobal(177600);
                byte* GBuff = (byte*)Marshal.AllocHGlobal(177600);
                byte* BBuff = (byte*)Marshal.AllocHGlobal(177600);

                BitmapData bmpData = bmp01.LockBits(new Rectangle(0, 0, BmpWidth, BmpHeight), ImageLockMode.WriteOnly, BmpPixelFormat);
                int stride = bmpData.Stride;  // 扫描线的宽度
                int offset = stride - BmpWidth*3;  // 显示宽度与扫描线宽度的间隙
                byte* pSrc = (byte*)bmpData.Scan0;  // 获取bmpData的内存起始位置

                int posScan = 0, posReal = 0;   // 分别设置两个位置指针,指向源数组和目标数组
                for (int x = 0; x < BmpHeight; x++)
                {
                    //// 下面的循环节是模拟行扫描
                    for (int y = 0; y < BmpWidth; y++)
                    {
                        RBuff[posScan] = pSrc[posReal];
                        GBuff[posScan] = pSrc[posReal+1];
                        BBuff[posScan] = pSrc[posReal+2];

                        posScan++;
                        posReal += 3;
                    }
                    posReal += offset;  //行扫描结束,要将目标位置指针移过那段“间隙”
                }
                 bmp01.UnlockBits(bmpData);

  • 相关阅读:
    Middleware
    Languages
    Errors
    Config
    CLI Console
    Linux远程复制文件
    CentOS下安装Gitlab
    Maven_POM配置结构
    Maven_POM配置详解
    MySQL索引背后的数据结构及算法原理
  • 原文地址:https://www.cnblogs.com/QuincyYi/p/12717849.html
Copyright © 2020-2023  润新知