透明な領域がある画像が 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;
}
あなたの役に立つコメントを投稿して、これを短くするために答えてください
/--------- 編集済み
オレンジ色で覆われたフレームが必要です。私の質問を理解するためだけにオレンジ色を描きました。その必要はありません。
よろしく、