함수에서 반환 된 포인터가 있습니다.
rs2::video_frame frame = frames.get_color_frame();
const void* data = frame.get_data();
이 포인터가 크기 의 RGB 값 (즉, 3s)의 배열이라는 것을 알고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] 삭제
몇 마디 만하겠습니다