0

透明な領域がある画像が 1 つありますが、その領域を無視したいと考えています。

そして、そのカバーされたフレームを最大限の可能性で手に入れましょう..

ここに 1 つの画像をアップロードしたので、私が何を求めているかがわかります。

ここに画像の説明を入力

このフレームを評価するためにいくつかのロジックと関数を使用しましたが、それでも正確なフレームを取得できませんでした。

そして、この種の画像を変更できるように動的コードが必要です。

ここに私が使用したサンプルコードを添付しました。

-(CGRect)getImageRect:(UIImage *)image{

    int x1,y1,x2,y2;
    BOOL flag=NO;
    CGFloat red,green,blue,alpha;

    UIColor *color=nil;

    // Get starting position y1
    flag=NO;
    for (int y=0; y<image.size.height; y++) {
        for (int x=0; x<image.size.width; x++) {
            // Get pixel color for
            color=[self getPixelColor:image withX:x withY:y];

            [color getRed:&red green:&green blue:&blue alpha:&alpha];

            if (red==0 && green==0 && blue==0 && alpha==0){
                continue;
            }else{
                y1=y;
                flag=YES;
                break;
            }
        }
        if (flag) {
            break;
        }
    }

    // Get starting position x1
    flag=NO;
    for (int x=0; x<image.size.width; x++) {

        for (int y=0; y<image.size.height; y++) {
            // Get pixel color for
            color=[self getPixelColor:image withX:x withY:y];

            [color getRed:&red green:&green blue:&blue alpha:&alpha];

            if (red==0 && green==0 && blue==0 && alpha==0) {
                continue;
            }else {
                x1=x;
                flag=YES;
                break;
            }
        }
        if (flag) {
            break;
        }
    }

    // Get last position y2
    flag=NO;
    for (int y=image.size.height; y>=0; y--) {

        for (int x=image.size.width; x>=0; x--) {
            // Get pixel color for
            color=[self getPixelColor:image withX:x withY:y];

            [color getRed:&red green:&green blue:&blue alpha:&alpha];

            if (red==0 && green==0 && blue==0 && alpha==0) {
                continue;
            }
            else {
                y2=y;
                flag=YES;
                break;
            }
        }
        if (flag) {
            break;
        }
    }

    // Get last position x2
    flag=NO;
    for (int x=image.size.width; x>=0; x--) {

        for (int y=image.size.height; y>=0; y--) {
            // Get pixel color for
            color=[self getPixelColor:image withX:x withY:y];

            [color getRed:&red green:&green blue:&blue alpha:&alpha];

            if (red==0 && green==0 && blue==0 && alpha==0) {
                continue;
            }
            else {
                x2=x;
                flag=YES;
                break;
            }
        }
        if (flag) {
            break;
        }
    }

    return CGRectMake(x1, y1, x2-x1, y2-y1);
}
- (UIColor *)getPixelColor:(UIImage *)image withX:(int)x withY:(int)y {

    CFDataRef pixelData = CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
    const UInt8* data = CFDataGetBytePtr(pixelData);

    int pixelInfo = ((image.size.width  * y) + x ) * 4; // The image is png

    UInt8 red = data[pixelInfo];         // Get red info
    UInt8 green = data[(pixelInfo + 1)]; // Get red info
    UInt8 blue = data[pixelInfo + 2];    // Get red info
    UInt8 alpha = data[pixelInfo + 3];   // I need only this info for my maze game
    CFRelease(pixelData);

    UIColor* color = [UIColor colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha/255.0f]; // The pixel color info

    return color;
} 

あなたの役に立つコメントを投稿して、これを短くするために答えてください

/--------- 編集済み

オレンジ色で覆われたフレームが必要です。私の質問を理解するためだけにオレンジ色を描きました。その必要はありません。

よろしく、

4

0 に答える 0