2012-03-07 16 views
1

フレームの太さが不明なため、UIImageをUIImageに合わせる必要があります(これもUIImageです)。画像が添付されています。UIImageの特定の矩形を取得する

UIImageで同じUIColorの矩形をどのように検出できますか? AIN画像のフレームを取得するための

答えて

0

は、このように簡単です:

CGRect myFrame = myUIImageView.frame; 

は、あなたが求めているものを、このですか?

+0

彼は同じUIColorの矩形について質問しています - 私は、レイヤーのフレームではなく、イメージ上の可視フレームの太さを差し引いたいと思います。 –

0
UIImage *img=[UIImage imageNamed:@"yourimagename.png(any)"]; 

あなたがイメージフレームとしてフレームを設定するには、それを利用することができ、

CGRect imageFrame=CGRectMake(x,y,img.size.width,img.size.height); 

注:

img.size.widthは、あなたのイメージとIMGの幅を与えます.size.heightは画像の高さを示します

+0

あなたの答えをありがとう... – Injar

0

をチェックできますピクセル(0,0)の色はです。これはフレームの色になります。次に あなたは異なる色になるまで1ピクセル下がり、1ピクセル左に行くでしょう。つまり、フレームの厚みは です。

ので、同じように:

self.yourImage = [UIImage imageNamed:@"painting-with-border.png"]; 

    NSLog(@"original size: %@", NSStringFromCGSize(self.yourImage.size)); 

    BOOL success = NO; 
    CGFloat x_frame = 1.0; 
    CGFloat y_frame = 1.0; 

    CGFloat x_max = self.yourImage.size.width/2.0; 
    CGFloat y_max = self.yourImage.size.height/2.0; 

    UIColor *frameColor = [self.yourImage colorAtPixel: CGPointMake (1.0,1.0)]; 

    NSString *hexFrameColor = [frameColor hexStringFromColor]; 
    NSLog (@"frame color: %@", hexFrameColor); 

    UIColor *testPixelColor; 
    NSString *hexTestPixelColor; 

    while ((!success) && (x_frame < x_max) && (y_frame < y_max)) { 

     x_frame = x_frame + 1.0; 
     y_frame = y_frame + 1.0; 

     testPixelColor = [self.yourImage colorAtPixel: CGPointMake (x_frame,y_frame)]; 
     hexTestPixelColor = [testPixelColor hexStringFromColor]; 

     NSLog(@"color at pixel (%.0f,%.0f): %@", x_frame,y_frame,hexTestPixelColor); 

     if (![hexFrameColor isEqualToString: hexTestPixelColor]) { 
      success = YES; 
      NSLog (@"found frame border at (%.0f,%.0f)", x_frame,y_frame); 
     } 
    } 

    CGRect newFrame; 

    if (success) { 

     newFrame = CGRectMake(x_frame,y_frame,self.yourImage.size.width-x_frame,self.yourImage.size.height-y_frame); 
     NSLog(@"To crop image inside frame use: %@", NSStringFromCGRect(newFrame)); 


    } else { 

     NSLog (@"couldn't define frame width"); 
    } 

この方法は、画像の真ん中に、それのフレームの画像をチェックします。

注:

ColorAtPixelUIKitの一部ではありません。 Ole BegemannのOBShapedButtonで入手できます。

hexStringFromColorは、UIKitの一部ではありません。 uicolor-utilitiesにあるカテゴリです。

クロッピングの場合UIImageここではさまざまな方法を見つけることができますが、それはあなたの質問の一部ではありません。

このコードは、画像を用いて試験した:

image with border

出力された:

原稿サイズ:{314、451}

フレームの色:ピクセルで980C0C

色(2,2):980C0C

c 980C0C

ピクセルの色(4,4):980C0C

ピクセルの色(5,5)ピクセルで980C0C

色(6,6)olor画素(3,3)で:414429

フレーム用内部クロップ画像に(6,6)

で見出さフレーム境界:{{6,6}、{308、445}}

注:このM境界が正確に同じ色から作られている場合にのみ、エソートが機能します。 .jpgの(圧縮された)一部の枠線は、色がわずかに変わる罫線を持つことがあります。そのためには、色の類似性をチェックするアルゴリズムを使用する必要がありますが、それはまったく別のトピックです。

また、このコードは、すべての面に同じ厚さのフレームがある画像用に書かれています。上下のフレームの厚さが左右の厚さと異なる場合にコードを修正できることは間違いありません。

+0

ここでは、 "yourImage"はUIImageのインスタントですか? B'coz上記のコードはyourImage.frameにerroeを与えます。 – Injar

+0

@ user1254220:もちろん、貼り付けはできません。コードを修正する必要があります。また、最下部のリンクからコードをダウンロードし、プロジェクトに適切なファイルを含める必要があります。 –

+0

はい、私は同じことをしましたが、うまく動作しません。 – Injar

関連する問題