从给定指针的位图中访问图像数据

发布于 2024-07-10 21:00:24 字数 246 浏览 6 评论 0原文

我的问题是一旦我有了指针就可以正确读取像素数据。

因此,我有一张占据整个 iPhone 屏幕且没有 Alpha 通道的图像(每个像素 24 位,每个组件 8 位,每行 960 字节),我想找出特定像素的颜色。

我有指向数据的指针

UInt8 *data = CFDataGetBytePtr(bitmapData);

,但现在我不确定如何在给定坐标的情况下正确索引数据?

My problem is reading the pixel data correctly once I have the pointer.

So I have an image that takes up the whole iPhone screen and has no alpha channel (24 bits per pixel, 8 bits per component, 960 bytes per row) and I want to find out the color of a particular pixel.

I have the pointer to the data

UInt8 *data = CFDataGetBytePtr(bitmapData);

but now I am not sure how to index into the data correctly given a coordinate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绾颜 2024-07-17 21:00:25
UInt8 *data = CFDataGetBytePtr(bitmapData);

unsigned long row_stride = image_width * no_of_channels; // 960 bytes in this case
unsigned long x_offset = x * no_of_channels;

/* assuming RGB byte order (as opposed to BGR) */
UInt8 r = *(data + row_stride * y + x_offset );
UInt8 g = *(data + row_stride * y + x_offset + 1);
UInt8 b = *(data + row_stride * y + x_offset + 2);


/* less portable but if you want to access it in as a packed UInt32, you could do */
UInt32 color = *(data + row_stride * y + x) & 0x00FFFF;  /* little endian byte ordering */
UInt8 *data = CFDataGetBytePtr(bitmapData);

unsigned long row_stride = image_width * no_of_channels; // 960 bytes in this case
unsigned long x_offset = x * no_of_channels;

/* assuming RGB byte order (as opposed to BGR) */
UInt8 r = *(data + row_stride * y + x_offset );
UInt8 g = *(data + row_stride * y + x_offset + 1);
UInt8 b = *(data + row_stride * y + x_offset + 2);


/* less portable but if you want to access it in as a packed UInt32, you could do */
UInt32 color = *(data + row_stride * y + x) & 0x00FFFF;  /* little endian byte ordering */
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文