c++ - 如何在 const void 指针的内存偏移处设置一个值?
问题描述
我有一个从函数返回的指针
rs2::video_frame frame = frames.get_color_frame();
const void* data = frame.get_data();
我知道这个指针是一个char
大小为 RGB 值(即 3 s)的数组frame.get_data_size()
。
鉴于此,我如何修改某些像素颜色
int bpp = frame.get_bytes_per_pixel();
int width = frame.get_width();
int height = frame.get_height();
int offset = (y * width * bpp) + (x * bpp);
int r = offset;
int g = offset + 1;
int b = offset + 2;
// ?data[r] = newRed;
// ?data[g] = newGreen;
// ?data[b] = newBlue;
解决方案
如果你有一个面向对象的方法,你会更容易:
struct Pixel {
short red;
short green;
short blue;
};
让您的框架与std::vector<Pixel> pixels
; 通过引用返回。std::vector<Pixel>& get_data();
pixels[y * width + x].red = newRed;
pixels[y * width + x].green = newGreen;
pixels[y * width + x].blue = newBlue;
如果你真的要一起工作,void*
那么试试这个
char* data = static_cast<char*>(const_cast<void*>(dataframe.get_data()));
// Since you also const cast it becomes more and more dangerous. You really need know what you are doing.
size_t bpp = frame.get_bytes_per_pixel();
size_t width = frame.get_width();
size_t height = frame.get_height();
size_t offset = (y * width * bpp) + (x * bpp);
size_t r = offset;
size_t g = offset + 1;
size_t b = offset + 2;
*(data + r) = newRed;
*(data + g) = newGreen;
*(data + b) = newBlue;
对于批量更新,您可以使用memset
.
有关详细信息,请参阅https://godbolt.org/z/xvc1xs。
推荐阅读
- javascript - Using CSS selector in DTM to create an event based rule
- android - Android 图标在预览中未正确显示
- php - Not going into if statement when pressing a button
- javascript - Klarna Payment gateway integration with WebFlow project
- python - How to best iterate through a list within a dictionary?
- html - 如何使选择等同于未提交?
- java - how to check if ElasticSearch's Restore is finished?
- kubernetes - Is kustomize for k8s backward chaining?
- javascript - 将变量中的数据(不在表单提交中)发送到谷歌表
- python - IndexError: list index out of range even though it works on a single file