首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使用c#标准将16位(rgb565) bmp加载到字节数组中

使用C#标准将16位(RGB565) BMP加载到字节数组中的步骤如下:

  1. 首先,需要使用C#的System.Drawing命名空间来处理图像。确保在代码文件的顶部添加以下引用:
代码语言:txt
复制
using System.Drawing;
using System.Drawing.Imaging;
  1. 创建一个方法来加载BMP图像并将其转换为字节数组:
代码语言:txt
复制
public byte[] LoadBmpToByteArray(string filePath)
{
    // 加载BMP图像
    Bitmap bmp = new Bitmap(filePath);

    // 创建一个字节数组来存储图像数据
    byte[] byteArray = new byte[bmp.Width * bmp.Height * 2]; // 16位图像,每个像素占2个字节

    // 遍历图像的每个像素
    int index = 0;
    for (int y = 0; y < bmp.Height; y++)
    {
        for (int x = 0; x < bmp.Width; x++)
        {
            // 获取像素的RGB值
            Color pixelColor = bmp.GetPixel(x, y);

            // 将RGB565格式的像素值转换为字节数组
            ushort pixelValue = (ushort)(((pixelColor.R >> 3) << 11) | ((pixelColor.G >> 2) << 5) | (pixelColor.B >> 3));
            byteArray[index++] = (byte)(pixelValue & 0xFF);
            byteArray[index++] = (byte)(pixelValue >> 8);
        }
    }

    // 返回字节数组
    return byteArray;
}
  1. 调用该方法并传入BMP文件的路径,将返回的字节数组保存到变量中:
代码语言:txt
复制
string bmpFilePath = "path/to/your/bmp.bmp";
byte[] byteArray = LoadBmpToByteArray(bmpFilePath);

通过以上步骤,你可以使用C#标准将16位(RGB565) BMP加载到字节数组中。请注意,这只是一个基本的示例,你可能需要根据实际需求进行适当的修改和错误处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WinCE解决“图片采集及压缩”问题的开发历程

虽然那个DLL驱动可以供C#调用,但是看那个驱动DLL的方法,在使用提取数据的那个函数的时候,必需要设置内核模式,而这个只能用C++来做,因为需要引用一个头文件的某个函数,显然C#是没有头文件这个概念的...于是这个时候的计划就是,用C++来写DLL程序,将致远公司提供的硬件层的驱动再封装一遍(把那个内核模式的设置函数封装进去),然后提取出图片数据,然后再用C#调用得到图片数据,保存到一个BYTE数组,然后通过...然后研究致远公司提供的代码示例,了解BMP位图的文件结构,从存储内容上进行分析。想从最底层上对图片进行逐字节的运算和操作。...第四阶段:在C#主程序对DLL数据进行承接     因为最终我要做出的效果就是,能够在C#程序中提供一个数据接口,也就是我能够给GPRS模块一个在C#环境下的byte数组。...网上普遍说的,C++的DLL向C#传出字符数组char*时,在C#程序对应的数据类型是StringBuilder类。

1.3K20
  • 浅析BMP位图文件结构(含Demo)

    下面直接引用其描述:     Bmp文件是非常常用的位图文件,无论是游戏还是其他都被广泛使用。针对bmp文件的处理也有一堆现成的api进行调用,然而文件内部究竟怎样,如何自己来解析这样的文件呢?...第一个bfType用于表示文件类型,如果它是bmp文件,那么它这个位置的值一定是”BM” 也就是0x4D42。第二个bfSize表示整个文件的字节数。...这个是通过如下计算方式得到的:位图文件除去位图数据实体外的三个部分的大小在同一文件系统下都是一样的,都为14+46+2*3=66字节(自己可以查看这些结构体数据的详细定义然后自己验证),位图编码为RGB565...的编码方式单像素点占用的长度),图片压缩类型为3(用来指示位图的编码方式是RGB565还是RGB555的,详细介绍可以查看WahtIf写的那个文章“BMP文件结构的探索”的示例代码),位图数据实体大小为...位图文件的数据实体部分:这里面以字节为单位存储着位图的每个个像素点的色彩信息,也是位图文件数据的主体部分。此部分的数据长度在位图信息头中可以得到。

    67310

    干货 | STM32实现OLED视频播放

    LCD上即可,那么如何实现呢?...(3)鼠标右键点击,选择高级捕获 (4)设置捕获参数并捕获帧 由于小熊派的屏幕的分辨率是240*240,一张RGB565的图片需要占用115200字节的缓存,所以是无法在Keil上编译通过的,为了能够完成我的作品...,所以我用了另外一个128*128的OLED屏,这样一张RGB565的图片仅需要32768字节的缓存,完全可以满足我的设计需求,接下来设置参数完毕后选择点击开始,然后点击播放视频三角符号,开始捕获帧。...(5)接下来视频开始播放,会看到捕获到的目录下有很多图片产生 2、利用Image2Lcd v3.2批量生成bin文件 (1)图片全部捕获完成后,使用Image2Lcd将bmp批量转换成bin文件..., DISPLAY_START_Y, OLED_WIDTH, OLED_HEIGHT, (uint16_t *)framebuffer); /*7.将偏移往后PIC_SIZE,就到了下一张图片

    1.6K10

    STM32CubeMX | 41-使用LTDC驱动TFT-LCD屏幕(RGB屏)

    本篇详细的记录了如何使用STM32CubeMX配置 STM32F767IGT6 的 LTDC 外设驱动 TFT-LCD (RGB)屏幕。 1....在资源紧张的嵌入式系统,在一般屏幕显示需求过于浪费珍贵的SRAM空间,所以在不影响显示的情况下,建议使用RGB565格式,每个像素点只需要16bit(两个字节)的显存空间就够了。...③ 设置显存空间: 本文中将帧缓存buffer创建在SDRAM,SDRAM的起始地址为 0xC0000000,由于使用 RGB565 格式,每个像素点需要两个字节显存,所以整个显存空间为:10246002...接着使用STemwin中提供的 BmpCvtST.exe 工具,打开刚刚生成的bmp图片,点击另存为: ? 选择保存为C文件: ? 格式选择RGB565、红蓝交换: ?...在 ltdc.c声明该数组: ? 将图片数组作为显存 将图片数组的地址传递给LTDC,并指定显存的大小为400*400: ? 编译,下载,见证奇迹: ?

    11.4K84

    【第3版emWin教程】第21章 emWin6.x的BMP图片显示

    1、 实际项目中强烈建议将BMP图片加载到emWin动态内存并解码到存储设备里面再显示,性能相当给力,测试V7开发板,H7+32位SDRAM,LTDC颜色格式配置为RGB565,刷新800*480分辨率图片可以达到...21.3.1 绘制已经加载到存储器的BMP图片 绘制加载到存储器的BMP图片主要是通过函数GUI_BMP_Draw来实现,下面我们分3步来说明如何将SD卡BMP图片显示到LCD上面。...下面我们分2步来说明如何将SD卡BMP图片显示到LCD上面。 第1步:将BMP图片复制到SD卡的根目录下,然后直接调用函数GUI_BMP_DrawEx就可以显示。...实验注意: 本实验主要学习emWin的BMP图片显示功能,实验所需的图片文件1.bmp已经存储到本工程的Doc文件夹下,使用此例子前,请务必将此文件存储到SD卡根目录,并将SD卡插到开发板上面。...21.6 总结 总的来说,STM32H7+32位SDRAM绘制BMP图片的性能已经比较给力,实际项目中推荐将BMP图片加载到emWin动态内存,然后绘制到内存设备,再通过内存设备函数显示此BMP图片的速度非常快

    84130

    手把手教你在STM32上实现OLED视频播放(很简单也很硬很肝!)

    然后将每一帧图像读出来显示到LCD上即可,那么如何实现呢?...115200字节的缓存,所以是无法在Keil上编译通过的,为了能够完成我的作品,所以我用了另外一个128*128的OLED屏,这样一张RGB565的图片仅需要32768字节的缓存,完全可以满足我的设计需求...(5)接下来视频开始播放,会看到捕获到的目录下有很多图片产生 image.png 2、利用Image2Lcd v3.2批量生成bin文件 (1)图片全部捕获完成后,使用Image2Lcd将bmp批量转换成..., DISPLAY_START_Y, OLED_WIDTH, OLED_HEIGHT, (uint16_t *)framebuffer); /*7.将偏移往后PIC_SIZE,就到了下一张图片...来看下效果: 5、项目开源地址 本节代码已同步到码云的代码仓库,获取方法如下: image.png 码云仓库: https://gitee.com/morixinguan/personal-open-source-project

    2.6K21

    C#图像压缩相关方法总结

    且大量的图形计算和IO操作也会导致程序卡顿,因此在PicSizer我选择了默认2个线程,最多10个线程 在使用C#自带的ThreadPool时,我发现即使就开一个线程,也会有严重的卡顿,因此我采用自己实现的线程池...线程池 实现线程池的具体思路是:先创建指定数量的线程,然后通过死循环不断地从一个数组读取图片进行压缩,直到结束。...{ //创建一个独占资源 ManualResetEvent manual = new ManualResetEvent(false); //添加到数组...本文中,我们希望10个线程共用一个函数来获取下一张图片在数组里的下标,这里显然用到了“写”操作,因此需要用到线程同步,即每次仅允许一个线程访问 C#的实现方式非常简单,只需要在函数上面加上一句就行 [MethodImpl...Dispose(); } } 考虑到写入的数据大部分都是固定的,所以我把文件头和数据段保存为一个byte数组,下次只需要先写入这个数组,然后通过偏移修改相关字段的数据就可以了 //头和数据段数组

    96840

    Android高效内存之让你的图片省内存

    磁盘占用空间的大小不是图片占用内存的大小,磁盘占用空间是在磁盘上存储图片需要的一个空间大小,内存大小是加载到内存占用的内存大小。两个只是单位是一样的,本质不是一个概念。...在Android,图片的存放目录和手机的屏幕密度影响图片最终加载到内存的实际大小,举个例子:假设我们的图片放到xhdpi目录下,那么我们本文中的图片占用的内存大小如下....2.2 在内存压缩图片   加载大图片时需要对图片进行压缩,使用等比例压缩方法直接在内存处理图片。...2.3 读取位图尺寸和类型时不把图片加载到内存   有时候我们取得一张图片,也许只是为了获得这个图片的一些信息,比如图片的width、height等信息,不需要显示到界面上,这个时候我们可以不把图片加载到内存...不要盲目一个大图到Android项目中,能使用.9进来使用,而且.9图本身尽可能小,另外能使用绘制实现就不要一个图片资源。

    1.2K111

    VB.NET图像处理的一些技巧以及其和C#图像处理的差距。

    早期的时候我使用的开发工具是VB6,VB6做图像处理的速度在我的软件Imageshop中有所体现,还是算可以的。目前,我已经改用C#来研究图像算法,C#中有指针,做图像处理起来效率确实要高不少。...这个函数就是LockBits,在vb.net中彩色图像数据的快速获取 一文,我们是调用了Marshal.Copy把LockBits锁定的内存数据拷贝到数据,然后对数组的值进行处理。...这样,就可以先定义个数组,然后把图像数据填充到这个数组,就避免了来回拷贝的耗时了,简单示例代码如下: Dim BmpData As New BitmapData Stride = ((Bmp.Width...GCHandleType.Pinned) BmpData.Scan0 = Hanlde.AddrOfPinnedObject() '取得字节数组的的第一个元素在内存的地址...的数组版要比C#数组版的速度要慢,由于VB.NET我不知道怎么样查看其对应的反汇编码,所以我还不清楚这是为什么。

    1.4K50

    【第3版emWin教程】第15章 emWin6.x的2D图形库之绘制位图

    }; /*************************** End of file ****************************/ 代码数组_acpic就是图片原始的位图数据,一个...}; /*************************** End of file ****************************/ 代码数组_acpic1就是图片原始的位图数据,一个...}; /*************************** End of file ****************************/ 代码数组_acpic1就是图片原始的位图数据,一个...15.4 emWin模拟器显示位图 这里我们将15.3.1小节和15.3.2小节生成的图片在模拟器上面显示出来,关于如何在模拟器运行如下代码,已经在第9/10章进行过讲解,这里不再赘述。...本章的重点还是要学会如何生成C文件格式的位图以及相关API函数的使用方法。

    79440

    C#Image , Bitmap 和 BitmapData

    LockBits方法和UnlockBits方法:分别锁定和解锁系统内存的位图像素.在基于像素点的图像处理方法中使用LockBits和UnlockBits是一个很好的方式,这两种方法可以使我们指定像素的范围来控制位图的任意一部分...Scan0属性:被锁定数组的首字节地址,如果整个图像被锁定,则是图像的第一个字节地址. 5. Stride属性:步幅,也称为扫描宽度....bmpData的内存起始位置 17 int scanBytes = stride * height;// 用stride宽度,表示这是内存区域的大小 18 //// 下面把原始的显示大小字节数组转换为内存实际存放的字节数组...的内存起始位置 13 14 int scanBytes = stride * map.Height;// 用stride宽度,表示这是内存区域的大小 15 16 //// 下面把原始的显示大小字节数组转换为内存实际存放的字节数组...其实stride占据的空间什么都没有做,我们如何遍历构建图片,就如何反遍历回数组就可以了 public static byte[] GetMapData(byte[] MapData,int width

    2.8K20

    【第3版emWin教程】第18章 emWin6.x的2D图形库之绘制流位图(SPI Flash方案)

    BMP,JPEG,PNG,GIF格式的图片不同,流位图已经是原始的图片数据,不需要进行解码就可以立即进行显示,显示速度最快。...18.4.1 将流位图文件转换为C数组格式文件 为了方便将bin文件添加到MDK工程,我们这里使用小软件B2C.exe将其转换为C格式文件(此软件已经放到本章配套例子V7-513_emWin6...该函数会识别串行FLASH型号 */ 第3步:显示加载到emWin动态内存的流位图。...App Task MspPro任务 :8192字节。 App Task UserIF 任务 :2048字节。 App Task COM 任务 :2048字节。...系统栈大小的单位是4字节,那么这里就是配置系统栈大小为2KB emWin动态内存配置: GUIConf.c文件的配置如下: #define EX_SRAM 1/*1 used extern sram

    86730

    【玩转Arm-2D】零基础Arm-2D API绘图入门无忧

    已知一个白底的圆角矩形: 它其实保存在一个四方四正的像素数组里(红色边框是我的,用来让指示范围更加清晰): 当目标背景的颜色也是白色时,复制该贴图,并无异样。...5、6、5个二进制位 ARGB32,RGB888占用24个bit,相对RGB565来说,每个像素多占用了8个bit。...问题来了:PNG格式的文件在解码后往往以ARGB32形式保存,我们如何将其连同Alpha信息一起应用到一个RGB565的屏幕上呢?...> 选项 描述 -h, --help 显示命令行使用方法 -i 输入图片文件的路径(png, bmp, jpeg...)...-o 输出c源文件的路径 可选 -name 数组的名字 -format 输出的颜色格式:rgb32, rgb565, gray8, all(默认) 可选 -dim <宽度

    90810

    Android高效内存2:让图片占用尽可能少的内存

    2.3 读取位图尺寸和类型时不把图片加载到内存   有时候我们取得一张图片,也许只是为了获得这个图片的一些信息,比如图片的width、height等信息,不需要显示到界面上,这个时候我们可以不把图片加载到内存...另外一种存储格式是把一幅图像Y,U,V分别用三个独立的数组表示。这种模式称为planar模式。 ? CMYK   CMYK也称作印刷色彩模式,顾名思义就是用来印刷的。...只要一个int类型变量,占用4个字节(高8位空着,低24位用于表示颜色);用16位整数表示法编码,只要一个short类型变量,占2个字节;因此可以看出采用整数表示法编码颜色值,可以大大节省内存,当然,颜色质量也会相对低一些...2.5.3 AndroidRGB编码格式(整型编码) RGB888(int):R、G、B分量各占8位 RGB565(short):R、G、B分量分别占5、6、5位 RGB555(short):RGB分量都用...不要盲目一个大图到Android项目中,能使用.9进来使用,而且.9图本身尽可能小,另外能使用绘制实现就不要一个图片资源。

    1.7K110

    Bitmap优化详解

    如果Bitmap使用 ARGB_8888 32位来平铺显示的话,占用的内存是1920x1080x4个字节,占用将近8M内存,可想而知,如果不对图片进行处理的话,就会OOM。...为了避免OOM异常,最好在解析每张图片的时候,先检查一下图片的大小,然后可以决定是把整张图片加载到内存还是把图片压缩后加载到内存。...如何获取采样率?...ARGB8888配置来处理色彩,占用4字节,改用RGB565,将只占用2字节,代价是显示的色彩将相对少,适用于对色彩丰富程度要求不高的场景。...这样,我们就不用频繁的去网络载入图片,为了非常好的控制内存问题,则会考虑使用LruCache作为Bitmap在内存的存放容器,在sd卡则使用DiskLruCache来统一管理磁盘上的图片缓存。

    1.9K20
    领券