标签: gpuimage

如何在 iOS 上使用 libtiff 编写 1bpp tiff?

我正在尝试使用 libtiff 将 UIImage 写为 tiff。问题是,即使我将它写为每像素 1 位,当我期望更接近 100k 或更少的东西时,文件仍然在 2-5MB 范围内。

这就是我所拥有的。

- (void) convertUIImage:(UIImage *)uiImage toTiff:(NSString *)file withThreshold:(float)threshold {

    TIFF *tiff;
    if ((tiff = TIFFOpen([file UTF8String], "w")) == NULL) {
        [[[UIAlertView alloc] initWithTitle:@"Error" message:[NSString stringWithFormat:@"Unable to write to file %@.", file] delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil] show];
        return;
    }

    CGImageRef image = [uiImage CGImage];

    CGDataProviderRef provider = CGImageGetDataProvider(image);
    CFDataRef pixelData = CGDataProviderCopyData(provider);
    unsigned char *buffer = (unsigned char *)CFDataGetBytePtr(pixelData);

    CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(image);
    CGImageAlphaInfo alphaInfo = CGImageGetAlphaInfo(image);
    size_t compBits …
Run Code Online (Sandbox Code Playgroud)

png uiimage libtiff ios gpuimage

2
推荐指数
1
解决办法
1525
查看次数

使用Blend Filter时GPUImage崩溃('over release framebuffer')

由于我在尝试将混合滤镜应用于图像并显示它时遇到的崩溃,我感到头疼.我想要做的只是将叠加图像放到另一个图像上.

这是我的代码:

- (GPUImageOutput<GPUImageInput> *)myFilter
{
    GPUImageFilterGroup *filtersGroup = [GPUImageFilterGroup new];

    // Saturation
    GPUImageSaturationFilter *saturationFilter = [GPUImageSaturationFilter new];
    saturationFilter.saturation = 0.0;
    [filtersGroup addFilter:saturationFilter];

    // Noise
    UIImage *noiseImage = [UIImage imageNamed:@"noise.png"];
    GPUImagePicture *noisePicture = [[GPUImagePicture alloc] initWithImage:noiseImage];
    GPUImageAddBlendFilter *blend = [GPUImageAddBlendFilter new];
    [blend useNextFrameForImageCapture];
    [filtersGroup addFilter:blend];
    [noisePicture addTarget:blend atTextureLocation:1];
    [noisePicture processImage];

    [saturationFilter addTarget:blend];

    filtersGroup.initialFilters = @[saturationFilter];
    filtersGroup.terminalFilter = blend;

    return filtersGroup;
}
Run Code Online (Sandbox Code Playgroud)

    // Applying filter
    GPUImageOutput <GPUImageInput> *effect = [self myFilter];
    self._photoHandle = [[GPUImagePicture alloc] initWithImage:staticImage];
    [self._photoHandle addTarget:effect];
    [effect addTarget:self.targetPreviewView];
    [self._photoHandle …
Run Code Online (Sandbox Code Playgroud)

ios gpuimage

2
推荐指数
1
解决办法
1619
查看次数

OpenGL ES - 在片段着色器中旋转纹理而不失真

我正在使用 Android 的 GPUImage 库对位图应用一些效果。本质上,GPUImage接受位图并使用OpenGL ES,将1 x 1立方体渲染到位图大小的帧缓冲区中。用户可以编写自定义片段着色器来控制输出。

我正在尝试编写一个片段着色器,它在给定旋转角度的情况下旋转位图。这是我到目前为止所拥有的:

varying vec2 textureCoordinate;
uniform sampler2D inputImageTexture;
uniform vec2 inputImageTextureSize;
uniform float angle;

const vec2 HALF = vec2(0.5);

void main()
{
    float aSin = sin(angle);
    float aCos = cos(angle);

    vec2 tc = textureCoordinate;
    tc -= HALF.xy;
    tc *= mat2(aCos, aSin, -aSin, aCos);
    tc += HALF.xy;

    vec3 tex = texture2D(inputImageTexture, tc).rgb;
    gl_FragColor = vec4(tex, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

它可以工作,但显然会扭曲位图(因为 GPUImage 视口设置为将 1 x 1 立方体映射到实际位图大小)。我不知道如何消除扭曲。我应该根据角度和 inputImageTextureSize 应用一些额外的缩放变换,但我未能获得正确的方程。StackOverflow 上的答案实际上都不适合我的情况。请帮忙!

谢谢!

shader android opengl-es glsl gpuimage

2
推荐指数
1
解决办法
2452
查看次数

GPUImage - 如何为GPUImageMedianFilter和GPUImageGaussianBlurFilter指定过滤器大小

嗨,GPUImage社区和Brad,

我想指定GPUImageMedianFilter和GPUImageGaussianBlurFilter的过滤器大小(半径).

是否需要指定GPU表示赞赏?或者可以通过GPUImage包装器完成吗?如果是这样,我该怎么做?

谢谢

gpu ios gpuimage

1
推荐指数
1
解决办法
1777
查看次数

GLSL - 如何访问纹理的像素数据是GLSL着色器?

我想要做的是,在OpenGL着色器中访问纹理的像素数据.之后,将它们的红色组件进行比较,以便我可以获得具有最大红色组件的像素的坐标.我可以用目标C,CPU处理能力来做到这一点.代码如下所示.

- (void)processNewPixelBuffer:(CVPixelBufferRef)pixelBuffer
{
    short maxR = 0;
    NSInteger x = -1, y = -1;

    CVPixelBufferLockBaseAddress(pixelBuffer, 0);    
    height = CVPixelBufferGetHeight(pixelBuffer);
    width = CVPixelBufferGetWidth(pixelBuffer);

    size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer);
    uint8_t *src_buff = CVPixelBufferGetBaseAddress(pixelBuffer);

    short** rawData = malloc(sizeof(short*) * height);
    for (int i = 0; i < height; i++){
        rawData[i] = malloc((sizeof(short) * width));
        for (int j = 0; j < width; j++)
            rawData[i][j] = (short)src_buff[(i + width * j) * 4];
    }

    for (int j = 0; j < height; j++)
    for …
Run Code Online (Sandbox Code Playgroud)

opengl-es glsl objective-c gpuimage

1
推荐指数
1
解决办法
6065
查看次数

如何使用iOS GPUImage生成直方图?

https://github.com/luisespinoza/LEColorPicker项目上工作,我试图使用项目GPUImage(https://github.com/BradLarson/GPUImage)从任意输入UIImage生成直方图UIImage.

我正在使用的当前代码如下:

- (NSDictionary*)dictionaryWithColorsPickedFromImage:(UIImage *)image
{
    GPUImageFilter *filter = [[GPUImageHistogramFilter alloc] initWithHistogramType:kGPUImageHistogramRGB];

    UIImage *filteredImage = [filter imageByFilteringImage:image];

    [UIImagePNGRepresentation(filteredImage) writeToFile:@"/Users/Luis/histogram.png" atomically:YES];

    return nil;
}
Run Code Online (Sandbox Code Playgroud)

问题是histogram.png只为每个输入图像产生一条黑线.

那么,如何使用iOS GPUImage生成直方图UIImage的正确代码呢?

iphone objective-c ios gpuimage

1
推荐指数
1
解决办法
3120
查看次数

GPUImage组过滤器

我试图在iPhoto应用程序中看到的单个视图中实现亮度,对比度和曝光滤镜.我试图建立组过滤器来做同样的事情.但它显示白色屏幕而不是修改图片.这是我申请的代码.

 GPUImageFilterGroup *groupFilter = [[GPUImageFilterGroup alloc]init];
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc]init];
    [brightnessFilter setBrightness:brightnessValue];
    GPUImageContrastFilter *contrastFilter = [[GPUImageContrastFilter alloc]init];
    [contrastFilter setContrast:contrastValue];
    GPUImageExposureFilter *exposureFilter =[[GPUImageExposureFilter alloc]init];
    [exposureFilter setExposure:exposureValue];
    [groupFilter addFilter:brightnessFilter];
    [groupFilter addFilter:contrastFilter];
    [groupFilter addFilter:exposureFilter];
     GPUImagePicture *stillImage= [[GPUImagePicture alloc]initWithImage:self.imageToModify];
    [stillImage addTarget:groupFilter];


    [stillImage processImage];

    previewPicture.image = [groupFilter imageFromCurrentlyProcessedOutputWithOrientation:self.imageToModify.imageOrientation];
Run Code Online (Sandbox Code Playgroud)

我甚至尝试将每个单独放置但仍然显示白色图像.以上代码我使用的是正确的吗?我也试过使用GPUImageFilterPipeline而不是GPUImageFilterGroup但仍然有相同的问题.为了记录,图像是静止图像而不是实时馈送.

image ios gpuimage

1
推荐指数
1
解决办法
4574
查看次数

GPUImage:EAGLContext和线程队列

最近我正在提高我的OpenGL ES技能,查看GPUImage的源代码.当我正在阅读GPUImageContext该类的代码时,我得到它存储queue对它在库的其他部分中使用的引用.

例如,GPUImageView.m在队列中使用commonInitwith runSynchronouslyOnVideoProcessingQueue来执行一些与上下文不直接相关的操作(比如向着色器添加属性).

我的问题是为什么开发人员决定在"辅助"队列上执行这些操作,这是将这个队列存储到像这样的类中的好处GPUImageContext.

我知道这个问题与GPUImage框架严格相关,但我认为这可能是一个很好的机会来理解像Brad Larson这样熟练的开发人员如何决定构建iOS中最着名的图像处理库之一.

我希望我没有以好奇心冒犯作者.

coding-style ios opengl-es-2.0 gpuimage

1
推荐指数
1
解决办法
710
查看次数

使用GPUImage将图像添加到视频

我正在尝试使用GPUImage库为视频的每个帧添加图像,但无法使其工作.出于某种原因,处理后的视频仅包括原始视频,没有图像叠加.我究竟做错了什么?

GPUImagePicture *overlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"overlayimage"] smoothlyScaleOutput:YES];
[overlay processImage];

GPUImageMovie *movie = [[GPUImageMovie alloc] initWithURL:[THE URL TO THE VIDEO ASSET]];
movie.delegate = self;
movie.runBenchmark = YES;
movie.playAtActualSpeed = YES;

self.movieView = [[GPUImageView alloc] initWithFrame:self.bounds];
self.movieView.fillMode = kGPUImageFillModePreserveAspectRatio;
[self addSubview:self.movieView];

GPUImageAlphaBlendFilter *filter = [[GPUImageAlphaBlendFilter alloc] init];
[movie addTarget:filter atTextureLocation:0];
[overlay addTarget:filter atTextureLocation:1];
[filter prepareForImageCapture];

[filter addTarget:self.movieView];

[movie startProcessing];
Run Code Online (Sandbox Code Playgroud)

objective-c ios gpuimage

1
推荐指数
1
解决办法
4874
查看次数

使用GPUImage在OpenGL ES着色器中使用bool返回类型的函数

我正在使用GPUImage框架开发iOS项目.我不能让我的着色器得到遵守.


我的片段着色器中有一个函数:

const vec2 boundMin = vec2(0.0, 0.0);
const vec2 boundMax = vec2(1.0, 1.0);

bool inBounds (vec2 p) {
   return all(lessThan(boundMin, p)) && all(lessThan(p, boundMax));
}
Run Code Online (Sandbox Code Playgroud)

着色器编译日志:

ERROR: 0:1: '_Bool' : syntax error syntax error
Run Code Online (Sandbox Code Playgroud)

当我替换所有调用函数

inBounds(vec2 p)

all(lessThan(boundMin, p)) && all(lessThan(p, boundMax))

很棒!


问题:

OpenGL ES 2.0 Fragment Shader支持bool功能吗?如果是的话,我哪里出错了?如果不是,为什么会出现类似的功能all(),lessThan()等等.

环境:iPad mini,iOS 7,OpenGL ES 2.0,Xcode 5.0.2

boolean opengl-es fragment-shader ios gpuimage

1
推荐指数
1
解决办法
801
查看次数