扫描行所占的字节数计算公式

简单探究下QImage为啥有时候会错位的问题 QImage源码部分浅析 阅读详情

( biWidth*biBitCount+31)/32*4  或  ((width * depth + 31) >> 5) << 2            

                                                                     一个扫描行所占的字节数

biWidth                                                        是图像的宽度以像素为单位

biBitCount                                                   是每个像素的位数


1.数字图像处理,BMP图像操作( biWidth*biBitCount+31)/32*4

http://blog.youkuaiyun.com/lscan/article/details/14647979

准备知识:

位:"位(bit)"是电子计算机中最小的数据单位。每一位的状态只能是0或1,是计算机处理、存储、传输数据时使用的二进制格式。

字节:8个二进制位构成1个"字节(Byte)",它是存储空间的基本计量单位。1个字节可以储存1个英文字母或者半个汉字,换句话说,1个汉字占据2个字节的存储空间。

像素:

位图的一个像素值所占的字节数:

当biBitCount=1时,8个像素占1个字节;

当biBitCount=4时,2个像素占1个字节;

当biBitCount=8时,1个像素占1个字节;

当biBitCount=24时,1个像素占3个字节,此时图像为真彩色图像。

即:1个像素所占的字节数是biBitCount/8

解决:

 

Windows规定图像文件中一个扫描行所占的字节数必须是4的倍数(即以字为单位),不足的以0填充,图像文件中一个扫描行所占的字节数计算方法:

( biWidth*biBitCount+31)/32*4               一个扫描行所占的字节数

biWidth                                                        是图像的宽度以像素为单位,

biBitCount                                                   是每个像素的位数,

biWidth*biBitCount                                    是一行所占的位数

( biWidth*biBitCount+31)                          把不满4字节的补满,使最终结果得出来的位数只会比原来的多(结尾有余数,不满4字节),或者不变(刚好以4个字节(32位)结束)

( biWidth*biBitCount+31)/32                    分成一块块4字节(32位)

( biWidth*biBitCount+31)/32*4                前面对齐4字节结束。得出字节总和

2.Capturing an Image

https://msdn.microsoft.com/en-us/library/windows/desktop/dd183402%28v=vs.85%29.aspx

DWORD dwBmpSize = ((bmpScreen.bmWidth * bi.biBitCount + 31) / 32) * 4 * bmpScreen.bmHeight;

3.QT qimage.cpp


const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 4)

QImageData * QImageData::create(const QSize &size, QImage::Format format)
{
    if (!size.isValid() || format == QImage::Format_Invalid)
        return 0;                                // invalid parameter(s)

    uint width = size.width();
    uint height = size.height();
    uint depth = qt_depthForFormat(format);

    const int bytes_per_line = ((width * depth + 31) >> 5) << 2; // bytes per scanline (must be multiple of 4)

    // sanity check for potential overflows
    if (INT_MAX/depth < width
        || bytes_per_line <= 0
        || height <= 0
        || INT_MAX/uint(bytes_per_line) < height
        || INT_MAX/sizeof(uchar *) < uint(height))
        return 0;

    QScopedPointer<QImageData> d(new QImageData);

    switch (format) {
    case QImage::Format_Mono:
    case QImage::Format_MonoLSB:
        d->colortable.resize(2);
        d->colortable[0] = QColor(Qt::black).rgba();
        d->colortable[1] = QColor(Qt::white).rgba();
        break;
    default:
        break;
    }

    d->width = width;
    d->height = height;
    d->depth = depth;
    d->format = format;
    d->has_alpha_clut = false;
    d->is_cached = false;

    d->bytes_per_line = bytes_per_line;

    d->nbytes = d->bytes_per_line*height;
    d->data  = (uchar *)malloc(d->nbytes);

    if (!d->data) {
        return 0;
    }

    d->ref.ref();
    return d.take();

}


MySQL 全表扫描成本计算 private:......IO 成本:从磁盘或内存读取数据页的成本。CPU 成本:访问记录需要消耗的 CPU 成本。导入成本:这一项直到 MySQL 8.0.29 都还没有被使用,先忽略。内存成本:这一项指的是占用内存字节数,计算 MRR(Multi Range Read)方式读取数据的成本时才会用到,也先忽略。全表扫描的成本就只剩 IO 成本、CPU 成本这两项了。全表扫描成本 =io_cost+ 1.1 +cpu_cost+ 1。 阅读详情

相关推荐

机器视觉检测中,图像的占存储的大小是如何计算的?

机器视觉检测中,图像的占存储的大小是如何计算的?

视觉人机器视觉的博客 815

QImage的bytesPerLine函数

如果图像的宽度不是对齐到特定字节数的倍数,那么可能会有额外的字节被添加到每行的末尾,以满足对齐要求。每行的字节数取决于图像的宽度、像素格式以及对齐方式等因素。函数,可以计算出每行像素数据的偏移量,从而在操作图像数据时可以准确地定位每行的起始位置。函数可以用于获取图像每行的字节数,以便在处理或操作图像数据时进行准确的偏移计算。函数返回的是图像每行的字节数,即图像数据在内存中连续存储的一行所占用的字节数。是 Qt 中 QImage 类的成员函数,用于获取图像每行的字节数。2024年3月26日,周二晚上。

m0_61629312的博客 1057

Android布局基础与UI设计入门:打造精美应用界面

恭喜你!现在你已经掌握了Android UI开发的基础知识,包括各种布局类型、常用控件的使用以及一些UI优化技巧。这些知识将帮助你设计出既美观又实用的Android应用界面。

m0_65382359的博客 2056

根据uchar *data构建QImage保存后图片损坏的问题,bytesPerLine很重要

构造QImage的时候 方法一: **QImage::QImage(const uchar data, int width, int height, Format format, QImageCleanupFunction cleanupFunction = Q_NULLPTR, void cleanupInfo = Q_NULLPTR) Constructs an image with the given width, height and format, that uses an existing re

weixin_43935474的博客 1788

python进行windows系统UI自动化之【pyautoit】

一般以我们平时操作,会从下图上方的地址栏进行操作,这里注意可以直接从下方的文件名处,输入对应的绝对地址,如:F:\程序设计书籍\《啊哈!pyautoit 是一个用python写的基于AutoItX3.dll的接口库,用来进行windows窗口的一系列操作,也支持鼠标键盘的操作。点击上访的图标,进行拖拉,到想访问的位置,注意下图两个红框中的数值,上面的框表示页面的标题和类,下面的框表示控件的类和序号(一般连起来使用)打开Auto Window Info(x64)或Auto Window Info(x86)

weixin_43936332的博客 9316

128x64 OLED屏的救星:手把手教你用纯C实现轻量级多级菜单

本文针对资源受限的单片机开发场景,提供了一套用纯C语言实现128x64 OLED屏轻量级多级菜单的完整方案。该方案摒弃了传统的树形指针结构,创新性地采用哈希表进行菜单项管理,核心代码不足200行,内存占用极低,逻辑清晰且易于维护。文章详细阐述了架构设计、实战演练及性能优化技巧,是STM32、ESP8266等小内存MCU项目的理想选择。

table的专栏 227

v4l2-ctl --all获取摄像头信息中Width/Height与Bytes per Line不相符

最近自己做了一个摄像头驱动,通过v4l2 --all查看摄像头的所有属性发现: Video input : 0 (Camera 0: no power) Format Video Capture: Width/Height : 8000/6000 Pixel Format : 'RG10' Field : None Bytes per Line : 16128 Size Image : 96768000...

qq_38892528的博客 2261

人工智能情感分析实战:文本情绪识别

人工智能情感分析,特别是文本情绪识别,已成为理解和处理人类情感信息的重要工具。通过数据预处理、特征提取、模型训练与评估等步骤,我们可以有效地从文本数据中提取情感信息,为各种应用场景提供有价值的洞察。随着技术的不断进步和创新,情感分析的应用前景将更加广阔,为我们的生活和工作带来更多便利和机遇。

shejizuopin的博客 1095

内存字节对齐详解

一、什么是对齐,以及为什么要对齐: 1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定

lcper198632的专栏 302

从空调温控到信号降噪:一阶RC低通滤波器在Arduino和STM32上的C语言实现指南

本文详细介绍了如何在Arduino和STM32平台上使用C语言实现一阶RC低通滤波器,涵盖从基础理论到实际应用的完整流程。通过具体代码示例和优化技巧,帮助开发者有效处理传感器噪声、信号平滑等问题,提升嵌入式系统的信号处理能力。

weixin_30565199的博客 502

三极管开关电路在脉冲应用中的性能瓶颈分析

深入探讨三极管开关电路在高频脉冲场景下的响应延迟与功耗问题,揭示其性能限制的关键因素。结合实际应用,分析开关速度与信号完整性之间的矛盾,为优化三极管开关电路设计提供实用参考。

weixin_42602368的博客 588

计算图像每行占用的字节数

在看《数字图像处理与机器视觉》这本书的时候有个计算图像每行占用的字节数,刚开始没看明白,周来琢磨的一下记录如下: #define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)//计算图像每行象素所占的字节数目 位图的一个像素值所占的字节数: 当biBitCount=1时,8个像素占1个字节; 当biBitCount=4时,2个像素占1个字节; 当biBit...

duanbin的博客 5674

【YOLOv8全方位学习手册】第四章 数据增强:从扩充数据到塑造模型的认知边界

"""使用 Albumentations 做自定义增强,兼容 YOLO 格式"""])# 转成 numpy# boxes 必须是 [[x_min,y_min,x_max,y_max], ...]# 在数据加载时调用你可以把集成到 PyTorch 的 Dataset 类里,或使用 Ultralytics 自带的DataLoader。

VectorShift的博客 211

位图的宽度

Windows规定一个扫描行所占的字节数必须是4的倍数(即以long为单位),不足的以0填充。计算公式:LineBytes = (width * bitCount + 31) / 32 * 4 Mark. 转载于:https://www.cnblogs.com/Smart_Joe/archive/2013/01/05/2845764.html...

dhzf1907的博客 376

Pytorch入门实战(2)-使用BP神经网络实现MNIST手写数字识别

上一篇:Pytorch入门实战(1) - 实现线性回归 涉及知识点 Pytorch nn.Module的基本使用 Pytorch nn.Linear的基本用法 PytorchVision Transforms的基本使用 Pytorch中DataLoader的基本用法 Pytorch详解NLLLoss和CrossEntropyLoss 如何确定神经网络的层数和隐藏层神经元数量 本文内容 本文将会使用BP神经网络(就是最普通的神经网络)实现一个MNIST手写数据集的实现。话不多说,直接开始。 首先先导入需要的包

iioSnail的博客 6617

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

bmp文件扫描行的问题

<br /><br />(转)Windows规定一个扫描行所占的字节数必须是4的倍数,不足4的倍数则要对其进行扩充。假设图像的宽为biWidth个像素、每像素biBitCount个比特,其一个扫描行所占的真实字节数的计算公式如下:<br /> DataSizePerLine = (biWidth * biBitCount /8+ 3) / 4*4<br /> <br />那么,不压缩情况下位图数据的大小(BITMAPI

v2_false的专栏 500

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

WIDTHBYTES位图操作函数详解

#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4); 这是为了计算一个位图的每行像素所占的字节数,而不是简单的通过像素数*每个像素所占的字节数。。这是因为存在内存对齐的关系。。为了考虑访问的速度。从文件读出图像数据时,一次读4个字节比一次读1个字节快。但如果图像文件不是4的倍数时,每行最后的像素就不可能采用一次读4个字节(否则就会把下一行的像素也读

keep_moving_cqu的专栏 6528

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Bitmap-BITMAPINFOHEADER结构

bmp图片的格式规定一个扫描行所占的字节数必须是4的倍数,不足的以0填充,因此,在通过图形像素大小计算图形大小时,其计算公司为: biSizeImage = (biWidth*biBitCount+31)/8*biHeight 其中,biWidth*biBitCount是每一行图像占用的位数,除以8是每行图像占用的字节数,31是按整数除法自动取整的原则来的,其保证每行图像字节数必须是4的整

DanyLin's 优快云 1467

RGB(480*272)屏幕画点扫描方法

横屏时坐标(x,y)在显存中的位置: ((480*y)+x) * 一个点占的字节数 竖屏时坐标(x,y)在显存中的位置: (480 * (272-x)+y) * 一个点占的字节数 RGB565:一个点占的字节数=2 RGB888:一个点占的字节数=4 ...

风轻云淡的博客 1707

Mysql之全表扫描成本计算

1.0 是成本常数 io_block_read_cost 的默认值,表示把磁盘文件中的一个数据页加载到 Buffer Pool 的成本,加上从 Buffer Pool 中的该数据页读取数据的成本。pages_on_disk_percent 是主键索引在磁盘文件中的叶结点占所有叶结点的比例,通过 1 - pages_in_memory_percent 计算得到。我们可以修改 cost_value 字段值,来调整 memory_block_read_cost 和 io_block_read_cost。

Free雅轩的博客 491

0103如何通过索引长度确定是否使用全索引

转自http://www.amogoo.com/article/3 感谢楼主的贡献 MySQL执行计划之key_len的计算 各种数据类型占用的字节数TINYINT 1 字节SMALLINT 2 个字节MEDIUMINT 3 个字节INT 4 个字节BIGINT 8 个字节FLOAT 4 个字节DOUBLE 8 个字节DECIMAL(M,D) M字节(D+2 , 如果M <D)...

178

响应时间、轮询延迟时间和扫描时间(以modbus为例)

在通信系统中,响应时间、轮询延迟时间和扫描时间是三个关键性能指标,直接影响通信效率和可靠性。以下结合Modbus协议特性及实际应用场景进行详细解释。。

qq_43298413的博客 6091

24位BMP文件存储介绍

24位bmp存储是按BGR BGR。。。 存的 bmp位图在存储时,图片数据部分的字节数一定是4的倍数,如果不够四的倍数,在每一行要补齐字节。 具体说是这样,假设现在有一张图,宽6个像素,高随便,24位格式保存(每个像素点占三个字节,分别代表RGB三颜色) 那么它每行有效数据部分应该是6×3=18字节,18不是4的倍数,所以要补齐,补到20字节。最终存储格式如下图:   前18位

lcalqf的专栏 1万+

图形图像学习心得——bmp图像大小biSizeImage算法公式由来

csdn论坛搜索关键字:biSizeImageVC/MFC分区——图形处理/算法主要链接:http://topic.youkuaiyun.com/u/20070929/13/9ED13464-121E-401E-B827-91E3BF5F0036.htmlhttp://topic.youkuaiyun.com/u/20100114/21/0A67123E-1407-4FC0-B4E0-6D27FB86

abcbuzhiming的专栏 3537

磁盘读写的时间花费和调度算法(操作系统)

今天复习了一下计算机组成原理,重新温习了一下磁盘,发现有许多知识点不记得了,于是写个笔记增强一下记忆。 磁盘的基本参数有: 磁头(head)磁头固定在可移动的机械臂上,用于读写数据。现代硬盘都是双面可读写,因此磁头数量等于盘片数的 2 倍。磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片, 最大为 255 (用 8 个二进制位存储); 磁道(track) 每个盘面都有 n 个同心...

Searchin_R的博客 1万+
上一篇: /usr/bin/ld: error: cannot find -lGL
下一篇: Qt资料大全
cocoasprite
博客等级 码龄14年 72粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值