- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将一个简单的 Core Image Filter 应用于实时摄像机输入。我认为我的代码没问题,但在 captureOutput 方法中使用方法 drawImage:inRect:fromRect
会导致 EXC_BAD_ACCESS
或 [__NSCFNumber drawImage:inRect:fromRect :]: unrecognized
选择器,这让我觉得当我尝试在其上调用 drawImage 时我的上下文已被释放。这对我来说没有意义,因为我的 CIContext
是类(class)成员。
问题似乎不是来自 OpenGL,因为我尝试了一个简单的上下文(不是从 EAGLContext
创建的)并且我遇到了同样的问题。
我正在装有 ios 6 的 iphone 5 上测试它,因为相机在模拟器上不工作。
你能帮我吗?非常感谢您的宝贵时间
我有我的 .h 文件:
<!-- language: c# -->
// CameraController.h
#import <UIKit/UIKit.h>
#import <OpenGLES/EAGL.h>
#import <AVFoundation/AVFoundation.h>
#import <GLKit/GLKit.h>
#import <CoreMedia/CoreMedia.h>
#import <CoreVideo/CoreVideo.h>
#import <QuartzCore/QuartzCore.h>
#import <CoreImage/CoreImage.h>
#import <ImageIO/ImageIO.h>
@interface CameraController : GLKViewController <AVCaptureVideoDataOutputSampleBufferDelegate>{
AVCaptureSession *avCaptureSession;
CIContext *coreImageContext;
CIContext *ciTestContext;
GLuint _renderBuffer;
EAGLContext *glContext;
}
@end
和我的 .m 文件
<!-- language: c# -->
// CameraController.m
#import "CameraController.h"
@interface CameraController ()
@end
@implementation CameraController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize Open GL ES2 Context
glContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!glContext) {
NSLog(@"Failed to create ES context");
}
[EAGLContext setCurrentContext:nil];
// Gets the GL View and sets the depth format to 24 bits, and the context of the view to be the Open GL context created above
GLKView *view = (GLKView *)self.view;
view.context = glContext;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
// Creates CI Context from EAGLContext
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject: [NSNull null] forKey: kCIContextWorkingColorSpace];
coreImageContext = [CIContext contextWithEAGLContext:glContext options:options];
glGenRenderbuffers(1, &_renderBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, _renderBuffer);
// Initialize Video Capture Device
NSError *error;
AVCaptureDevice *videoDevice = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:videoDevice error:&error];
// Initialize Video Output object and set output settings
AVCaptureVideoDataOutput *dataOutput = [[AVCaptureVideoDataOutput alloc] init];
[dataOutput setAlwaysDiscardsLateVideoFrames:YES];
[dataOutput setVideoSettings:[NSDictionary dictionaryWithObject:[NSNumber numberWithInt:kCVPixelFormatType_32BGRA]
forKey:(id)kCVPixelBufferPixelFormatTypeKey]];
// Delegates the SampleBuffer to the current object which implements the AVCaptureVideoDataOutputSampleBufferDelegate interface via the captureOutput method
[dataOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()];
// Initialize the capture session, add input, output, start urnning
avCaptureSession = [[AVCaptureSession alloc] init];
[avCaptureSession beginConfiguration];
[avCaptureSession setSessionPreset:AVCaptureSessionPreset1280x720];
[avCaptureSession addInput:input];
[avCaptureSession addOutput:dataOutput];
[avCaptureSession commitConfiguration];
[avCaptureSession startRunning];
}
-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
// Creates a CIImage from the sample buffer of the camera frame
CVPixelBufferRef pixelBuffer = (CVPixelBufferRef)CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *inputImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
// Creates the relevant filter
CIFilter *filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setValue:inputImage forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:0.8f] forKey:@"InputIntensity"];
// Creates a reference to the output of the filter
CIImage *result = [filter valueForKey:kCIOutputImageKey];
// Draw to the context
[coreImageContext drawImage:result inRect:[result extent] fromRect:[result extent]]; // 5
[glContext presentRenderbuffer:GL_RENDERBUFFER];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
最佳答案
在您的 viewDidLoad 方法中,您有:
coreImageContext = [CIContext contextWithEAGLContext:glContext options:options];
如果要在captureOutput方法中使用,需要保留coreImageContext。
关于ios - CIContext drawImage 导致 EXC_BAD_ACCESS - iOS 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16843093/
我使用缓冲方法更新 Canvas ,问题是当我在缓冲 Canvas 中绘制图像并将其应用于真实 Canvas 时,真实 Canvas 上没有图像。但我可以将任何其他东西应用到真正的 Canvas 上。
好的,我正在使用 JavaScript Canvas 元素等创建一个游戏。我已经能够加载大量图像,但在选定的少数图像上,JavaScript 会回复错误,例如 Uncaught TypeError:
我的 Canvas 有一个简单的绘制图像,但它不会显示在第一帧上。 这让我发疯,我不知道为什么它不会这样做!! 这是我的脚本: img = new Image(); img.src = 'images
我正在尝试在我的代码上调用 DrawImage(),我正在遵循本教程 Jetpack Tutorial , 但我收到此错误: Unresolved reference: DrawImage 我尝试在
我目前正在尝试将图像打印到屏幕上,以便准备创建游戏。我可以单独显示图像,但前提是该图像是在 paintComponents() 类中实例化的。当然,我不想每帧都重新实例化整个板,但似乎无法让它工作。我
我正在尝试使用drawImage()方法获取要在屏幕上绘制的.jpg图像,但它不会绘制。这是代码: public void paint(Graphics g) { Image imag
在我的程序中,我有以下代码: package io.github.AdmiralSbs.DiceWars; import javax.imageio.ImageIO; import javax.swi
这基本上就是我的代码的工作方式 class Main extends JFrame implements Runnable { public Main() { //init ever
几天来,我一直在努力弄清楚为什么我的九层代码不能按预期工作。据我所知,Graphics.DrawImage 方法似乎存在问题,它无法正确处理我的九个切片图像。所以我的问题是如何补偿在紧凑型框架上运行我
当您将名为 logo.png 的图片放在与此 html 文件相同的目录中并尝试在 Web 浏览器中运行它时,该图片在 IE 中仅出现 10 次刷新中的 1 次,而在Firefox,但在进一步刷新后会出
当我使用 Graphics.DrawImage 绘制图像并以比原始图像更大的尺寸绘制时,它最终变得有点太小了。您可以在下图中看到这一点: 绿线不应该是可见的,也不是图像的一部分。相反,它们被绘制在图像
import java.awt.*; import javax.swing.*; public class Main { JFrame jf; Main() {
我正在尝试使用 Java 面板显示图像,但行不通。该代码没有给出任何异常和/或错误,但图像没有加载。该图像确实存在,我也尝试过 .jpg,但效果不佳。 package feupcraftproject
我需要在内存中保存约 50 个图像(这是必须的,也是我无法改变的条件)。但是,有时我想在 JFrame 上绘制这些图像的缩略图。 使用 graphics.drawImage(picture, 100,
最近我一直在构建一个在JFrame上绘制图像的应用程序,一切都很棒,但是当窗口离开屏幕时,绘制的图像就消失了,我一直想知道是否有办法避免那?谢谢 import javax.swing.*; 导入 ja
我有一个扩展 jlabel 并使用 paintComponent 在其上绘制的类,如下所示这是 paintPhotos.java package myApp; import java.awt.*; i
我正在玩 JavaFX,在 start(Stage theStage) 类中我有以下代码: /*... Scene, stage, canvas ...*/ GraphicsContext gc =
我正在尝试编写一些简单的游戏,但我一直在 Canvas 上绘制资源。我创建了一个 AssetsLoader“类”来加载图像并将其保存为图像对象。一开始我只想绘制一些加载的资源。但是drawImage函
我使用drawImage来“调整”图像的大小; img.onload = function(){ var width = img.width * 0.16,
我正在使用drawImage()。这是我的代码。 imDiv 包含一个内联 svg。 var c =document.getElementById( 'cvs' ); var ctx =c.g
我是一名优秀的程序员,十分优秀!