0

NewiPad はロジックでピクセルの RGB 値を取得するのが非常に遅いのですが、iPad1、iPad2 は非常に高速です。

- (RGB) getTouchAreaPixelRGB: (CGPoint) point
{
     NSString * str_BackImageName = @ "butterfly_BG.png";
     CGImageRef cgBackImage = CGImageRetain ([UIImage imageNamed: str_BackImageName]. CGImage);
     size_t width = CGImageGetWidth (cgBackImage);
     size_t height = CGImageGetHeight (cgBackImage);
     CGDataProviderRef backProvider = CGImageGetDataProvider (cgBackImage);
     CFDataRef backBitmapData = CGDataProviderCopyData (backProvider);
     const UInt8 * backData CFDataGetBytePtr (backBitmapData);

     RGB rgb;
    
     if ((point.x <width) && (point.y <height))
     {
         size_t offset = ((width * point.y) + point.x) * 4;
         rgb.nRed = backData [offset];
         rgb.nGreen = backData [offset +1];
         rgb.nBlue = backData [offset +2];
     }
    
     return rgb;
}
4

1 に答える 1

1

コードの最適化を行うだけです。

この関数が「butterfly_BG.png」でのみ機能する場合は、呼び出さないでください

NSString * str_BackImageName = @ "butterfly_BG.png";
 CGImageRef cgBackImage = CGImageRetain ([UIImage imageNamed: str_BackImageName]. CGImage);
 size_t width = CGImageGetWidth (cgBackImage);
 size_t height = CGImageGetHeight (cgBackImage);
 CGDataProviderRef backProvider = CGImageGetDataProvider (cgBackImage);
 CFDataRef backBitmapData = CGDataProviderCopyData (backProvider);
 const UInt8 * backData CFDataGetBytePtr (backBitmapData);

毎回。アプリの起動時に一度にこれを調整するだけです。次に、新しい機能は次のようになります。

- (RGB) getTouchAreaPixelRGB: (CGPoint) point
{
 RGB rgb;

 if ((point.x <width) && (point.y <height))
 {
     size_t offset = ((width * point.y) + point.x) * 4;
     rgb.nRed = backData [offset];
     rgb.nGreen = backData [offset +1];
     rgb.nBlue = backData [offset +2];
 }

 return rgb;
}
于 2012-08-20T08:37:15.387 に答える