0

Brad Larson の GPUImage Framework を使用して UIImage 要素を追加しています。画像は正常に追加されましたが、主な問題は、画像がビデオのアスペクト比に引き伸ばされていることです。これが私のコードです:

    GPUImageView *filterView = (GPUImageView *)self.view;
    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
    transformFilter=[[GPUImageTransformFilter alloc]init];
    CGAffineTransform t=CGAffineTransformMakeScale(0.5, 0.5);
    [(GPUImageTransformFilter *)filter setAffineTransform:t];
    [videoCamera addTarget:transformFilter];

    filter = [[GPUImageOverlayBlendFilter alloc] init];
    [videoCamera addTarget:filter];
    inputImage = [UIImage imageNamed:@"eye.png"];
    sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];
    [sourcePicture forceProcessingAtSize:CGSizeMake(50, 50)];
    [sourcePicture processImage];
        [sourcePicture addTarget:filter];
    [sourcePicture addTarget:transformFilter];


    [filter addTarget:filterView];
    [videoCamera startCameraCapture];

画像をブレンドする前に変換フィルターを使用しようとしましたが、スケーリングされません。画像を中央に表示したいのですが、どうすればいいですか?ありがとう

4

1 に答える 1

0

あなたは正しい道を進んでいます。

次のコードは、オーバーレイ画像を読み込み、実際のサイズを維持するために変換を適用します。デフォルトでは、ビデオの中央に配置されます。

GPUImageView *filterView = (GPUImageView *)self.view;
videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;

filter = [[GPUImageOverlayBlendFilter alloc] init];
transformFilter = [[GPUImageTransformFilter alloc]init];

[videoCamera addTarget:filter];
[transformFilter addTarget:filter];

// setup overlay image
inputImage = [UIImage imageNamed:@"eye.png"];
sourcePicture = [[GPUImagePicture alloc] initWithImage:inputImage smoothlyScaleOutput:YES];

// determine the necessary scaling to keep image at actual size
CGFloat tx = inputImage.size.width / 480.0;     // 480/640: based on video camera preset
CGFloat ty = inputImage.size.height / 640.0;

// apply transform to filter
CGAffineTransform t = CGAffineTransformMakeScale(tx, ty);
[(GPUImageTransformFilter *)transformFilter setAffineTransform:t];

//
[sourcePicture addTarget:filter];
[sourcePicture addTarget:transformFilter];
[sourcePicture processImage];

[filter addTarget:filterView];
[videoCamera startCameraCapture];
于 2013-09-12T16:24:03.813 に答える