0

アプリで GPUImage を使用することができ、ボタンのクリックで写真にフィルターを入れようとしましたが、別の問題があります。

    GPUImageFilter *selectedFilter;
    if (sender.tag == 1) {
        selectedFilter = [[GPUImageFilter alloc] init];
    } else if (sender.tag == 2) {
        selectedFilter = [[GPUImageThresholdEdgeDetection alloc] init];
    } else if (sender.tag == 3) {
        selectedFilter = [[GPUImageSketchFilter alloc] init];
    } else if (sender.tag == 4) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"crossprocess.acv"];
    } else if (sender.tag == 5) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Summer.acv"];
    } else if (sender.tag == 6) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"NightCat.acv"];
    } else if (sender.tag == 7) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Breeze.acv"];
    } else if (sender.tag == 8) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"OldTone.acv"];
    } else if (sender.tag == 9) {
        selectedFilter = [[GPUImageToneCurveFilter alloc] initWithACV:@"Sky.acv"];         
    }
    filteredImg = [selectedFilter imageByFilteringImage:image];
    [insertPhoto1 setImage:filteredImg];

GPUImageToneCurveFilter が機能していません。.acv フィルターのボタンをクリックすると、アプリがクラッシュし、このエラーがスローされます。

Thread 1: Program received signal: "EXC_BAD_ACCESS".

この部分にハイライトを入れて

version = CFSwapInt16BigToHost(*(int*)([databuffer bytes]));

私は何をすべきか?エラーの意味は何ですか?

4

1 に答える 1

0

ここで、変数のキャストに関するメモリ管理の問題があるようです。2 つのポインター記号を使用します。それは私には間違っているようです。

version = CFSwapInt16BigToHost((int*)([databuffer bytes]));

またはそれ以上

version = CFSwapInt16BigToHost([databuffer bytes]);

引数と戻り値がマニュアルに従って関数と一致していることを確認してください!

アップルのマニュアルでは、この機能について次のように述べられています。

CFSwapInt16HostToBig

16 ビット整数をホストのネイティブ バイト オーダーからビッグ エンディアン形式に変換します。

uint16_t CFSwapInt16HostToBig (
   uint16_t arg
);

パラメータ * arg * スワップするバイトの整数。 戻り値 バイトがスワップされた整数。ホストがビッグ エンディアンの場合、この関数は arg を変更せずに返します。

于 2012-10-04T08:15:15.057 に答える