関数からポインタが返されました
rs2::video_frame frame = frames.get_color_frame();
const void* data = frame.get_data();
このポインタは、サイズがRGB値(つまり3秒)の配列であることを知っています。char
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を参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加