博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
拷贝变换3字节像素到4字节内存
阅读量:4840 次
发布时间:2019-06-11

本文共 1043 字,大约阅读时间需要 3 分钟。

    大部分原始像素为24位的,即RGB888格式,以连续3个8位为一个像素存储在文件中,比如BMP文件,计算机内存则是以8位、16位、32位、64位等结构存储数据的,如果读取文件存于内存,因为没有24位这一种结构,即发生像素错位,GDI显示考虑到了这一问题,当biBitCount = 24时,GDI内部进行调整,当biBitCount = 32时,则需要对齐32位,每32位的低24位为RGB888,为一个像素。考虑到后续显示数据结构的多样性,所以写了一个变换函数。

void CopyImage3To4Mem(void *pDst, void *pSrc, WORD wFrameWidth, WORD wFrameHeight) // 拷贝变换3字节像素到4字节内存{   _asm   {       mov bx, wFrameHeight;// 传递帧高度       mov esi, pSrc; // 传递源指针          mov edi, pDst; // 传递目标指针       L1: // 高度循环	   mov cx, wFrameWidth; // 传递一行计数                        L0:                    //行循环	       mov al, [esi + 0]; //取出B	       mov ah, [esi + 1]; //取出G	       mov dl, [esi + 2]; //取出R	       mov [edi + 0], al; //存入R	       mov [edi + 1], ah; //存入G	       mov [edi + 2], dl; //存入B	       add esi, 3; // 源步进3字节	       add edi, 4; // 目标步进4字节	   dec cx; // 减一像素点	   jnz L0; // 一行循环判断       dec bx;       jnz L1; //减一行高度判断   }}  

需要显示的数据必须拷贝到显示内存,函数以拷贝方式传递变换,源每次步进3个字节,目的步进4个字节,仅传递3个字节。 目的必须4个字节对齐。

以上函数在64位Win10,C++Builder 6编译通过,结果正确。

 

转载于:https://www.cnblogs.com/hbg200/p/9960763.html

你可能感兴趣的文章
socket套接字
查看>>
HBase表基本操作,读取和写入
查看>>
kendo-ui下拉树形选择(DropDownTreeView)
查看>>
TDDL DataSource
查看>>
第八周感想
查看>>
[资源共享]C#+AE构建GIS桌面端应用系统框架-全代码
查看>>
如何自定义添加微信公众号消息模版
查看>>
前端面试题总结(二)CSS篇
查看>>
sharepoint_study_8
查看>>
Win10配置MySQL8.0.15免安装版教程
查看>>
LeetCode 题目总结/分类
查看>>
LeetCode -- Valid Anagram
查看>>
mochiweb 源码阅读(七)
查看>>
新建springboot项目POM文件第一行报错 Unknown Error
查看>>
Redis 持久化
查看>>
大龄屌丝自学笔记--Java零基础到菜鸟--019
查看>>
转:黑客讲故事:攻下隔壁女生路由器后,我都做了些什么
查看>>
hdu 5463 Clarke and minecraft(贪心)
查看>>
Css轮廓
查看>>
Perl入门笔记2之第二章 标量数据
查看>>