Width vs Pitch

1、单位不同,width是像素,pitch是字节。因此一个640*480的8位图和640*480的32位 图他们width一样而pitch不一样。 
2、pitch可能大于width个像素所占字节数。width就是图像实际显示的宽度;而pitch 是存储一行图像所占的字节(相邻两行起点指针的差值),有时为了高效处理,会将每 行图像都对齐存储,这样pitch就包括了对齐使用的填充字节。
 
void ChangeRed()
{
    //假定_surface是一个指向IDirectSurface9接口的指针
    //每个像素 32bit的像素格式

    //取得表面描述
    D3DSURFACE_DESC surfaceDesc;
    _surface->GetDesc(&surfaceDesc);

    //取得被锁定的表面像素指针
    D3DLOCKED_RECT lockedRect;
    _surface->LockRect(
        &lockedRect,//指向被锁定表面的数据
        0,//0表示锁定全部表面
        0);//0表示没有锁定标记

    //遍历表面上的每个像素,将他们设为红色
    DWORD *imageData = (DWORD *)lockedRect.pBits;
    for (int i = 0; i < surfaceDesc.Width; ++i)
    {
        for (int j = 0; j < surfaceDesc.Height; ++j)
        {
            //取得纹理索引
            int index = i * lockedRect.Pitch / 4 + j;
            imageData[index] = 0xffff0000;
        }
     }

}

转载于:https://www.cnblogs.com/YinaPan/p/3889774.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
//Copyright (c) 2020 KEYENCE CORPORATION. All rights reserved. #include <stdio.h> #include <stdlib.h> #include <string> #include <fstream> #include "CsvConverter.h" using namespace std; static int COLLECT_VALUE = 32768; static double INVALID_VALUE = -999.9999; //保存激光轮廓数据到CSV文件 //定义了一个名为CsvConverter的类,并包含了一个名为Save的函数。 //函数接受保存路径(savePath)、图像数据指针(image)、行数(lines)、列数(width)和Z轴间距(z_pitch_um)作为输入参数 long CsvConverter::Save(string savePath, unsigned short *image, int lines, int width, float z_pitch_um) { // Save the profile创建用于保存数据的文件流 ofstream stream(savePath); if (!stream) return -1; //// 定义指向图像数据的指针 unsigned short *ptr = (unsigned short*)&image[0]; //// 创建缓冲区 char buffer[20]; //遍历每一行数据 for (int i = 0; i < lines; i++) { //// 遍历每一列数据 for (int j = 0; j < width; j++) { //// 计算每个像素的实际数值 double value = *ptr == 0 ? INVALID_VALUE : (*ptr - COLLECT_VALUE) * z_pitch_um / 1000; //将实际数值转换为字符串并写入缓冲区 int length = sprintf_s(buffer, "%-.4f", value); //将数据写入文件流 stream.write((char*)buffer, length * sizeof(char)); if (j != (width - 1)) stream.write(",", sizeof(char));//// 如果不是当前行的最后一个像素,则写入逗号分隔符 ptr++;//// 指针向后移动一个位置 } stream << std::endl;//// 写入换行符 } stream.close();//// 关闭文件流 return 0;// 返回操作结果,0表示成功 } 把这个改为python
最新发布
07-15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值