4

画像にさまざまなフィルターを適用するアプリケーションがあります。iOS 5 では問題なく動作しますが、6 ではクラッシュします。以下は、クラッシュする場所のサンプルです。

CGImageRef inImage = self.CGImage;
CFDataRef m_DataRef = CGDataProviderCopyData(CGImageGetDataProvider(inImage)); 
UInt8 * m_PixelBuf = (UInt8 *) CFDataGetBytePtr(m_DataRef); 

int length = CFDataGetLength(m_DataRef);

for (int i=0; i<length; i+=4)
{
    if(filter == filterCurve){

    int r = i;
    int g = i+1;
    int b = i+2;

    int red = m_PixelBuf[r];
    int green = m_PixelBuf[g];
    int blue = m_PixelBuf[b];

    m_PixelBuf[r] = SAFECOLOR(red); //    <==== EXC_BAD_ACCESS (code = 2)
    m_PixelBuf[g] = SAFECOLOR(green);
    m_PixelBuf[b] = SAFECOLOR(blue);
   }
}

に値を割り当て直そうとすると、アクセス ポイントが不良であることに注意してくださいm_PixelBuf。なぜこれが起こっているのか誰にも分かりますか?iOS 6 では何が原因でしょうか?

4

2 に答える 2

5

これは問題を解決します: http://www.iphonedevsdk.com/forum/iphone-sdk-development/108072-exc_bad_access-in-ios-6-but-not-in-ios-5.html

iOS 6では、データのバイトを直接操作する場合は、(の代わりに) を使用し、その後に(CFDataCreateMutableCopy()の代わりに) を使用する必要があります。CGDataProviderCopyData()CFDataGetMutableBytePtr()CFDataGetBytePtr()

于 2012-09-21T05:17:12.960 に答える
0

これは、ios 6 で動作する新しいクラスを見つける URL です。

于 2012-11-20T06:25:09.117 に答える