我如何为 glReadPixels 选择 UIImage?

发布于 2024-10-07 04:14:52 字数 81 浏览 1 评论 0原文

我有一个包含 50 张图像的视图。图像可能会重叠。我想(例如)选择图像编号 33 并找到像素颜色。我该怎么做? PS我使用glReadPixels。

I have a view with 50 images. Images may overlap. I want (for example) select image number 33 and find pixel color. How can i do this ?
PS i use glReadPixels.

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

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

发布评论

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

评论(1

提赋 2024-10-14 04:14:52

除非您想首先将图像应用为纹理来消磨时间,否则您不会使用 glReadPixels。您可以直接从 UIImage 执行此操作:

void pixelExamine( UIImage *image )
    {
    CGImageRef colorImage = image.CGImage;
    int width = CGImageGetWidth(colorImage);
    int height = CGImageGetHeight(colorImage);

    uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), colorImage);

    int x;
    int y;
    uint8_t *rgbaPixel;

    for( y = 0; y < height; y++)
        {
        rgbaPixel = (uint8_t *) &pixels[y * width];

        for( x = 0; x < width; x++, rgbaPixel+=4)
            {
            //  rgbaPixel[0] = ALPHA 0..255
            //  rgbaPixel[3] = RED 0..255
            //  rgbaPixel[2] = GREEN  0..255
            //  rgbaPixel[1] = BLUE 0..255
            }
        }

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    free(pixels);
    }

Unless you want to kill time applying the image as a texture first, you wouldn't use glReadPixels. You can do this directly from the UIImage instead:

void pixelExamine( UIImage *image )
    {
    CGImageRef colorImage = image.CGImage;
    int width = CGImageGetWidth(colorImage);
    int height = CGImageGetHeight(colorImage);

    uint32_t *pixels = (uint32_t *) malloc(width * height * sizeof(uint32_t));

    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = CGBitmapContextCreate(pixels, width, height, 8, width * sizeof(uint32_t), colorSpace, kCGBitmapByteOrder32Little | kCGImageAlphaPremultipliedLast);
    CGContextDrawImage(context, CGRectMake(0, 0, width, height), colorImage);

    int x;
    int y;
    uint8_t *rgbaPixel;

    for( y = 0; y < height; y++)
        {
        rgbaPixel = (uint8_t *) &pixels[y * width];

        for( x = 0; x < width; x++, rgbaPixel+=4)
            {
            //  rgbaPixel[0] = ALPHA 0..255
            //  rgbaPixel[3] = RED 0..255
            //  rgbaPixel[2] = GREEN  0..255
            //  rgbaPixel[1] = BLUE 0..255
            }
        }

    CGContextRelease(context);
    CGColorSpaceRelease(colorSpace);
    free(pixels);
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文