嗨,有什么方法可以在 iPhone SDK 中将图像的瘦尺寸更改为胖尺寸,反之亦然吗?
在这个应用程序中,我想为用户提供一种可能性,通过滑动 slider 将其图像从常规尺寸更改为胖尺寸,他可以在 iPhone SDK 中测量其尺寸吗? 我认为这可以通过获取图像的像素来实现,我已经尝试过此代码来获取图像的像素,但它只是从图像中删除了颜色。
UIImage *image = [UIImage imageNamed:@"foo.png"];
CGImageRef imageRef = image.CGImage;
NSData *data = (NSData *)CGDataProviderCopyData(CGImageGetDataProvider(imageRef));
char *pixels = (char *)[data bytes];
// this is where you manipulate the individual pixels
// assumes a 4 byte pixel consisting of rgb and alpha
// for PNGs without transparency use i+=3 and remove int a
for(int i = 0; i < [data length]; i += 4)
{
int r = i;
int g = i+1;
int b = i+2;
int a = i+3;
pixels[r] = pixels[r]; // eg. remove red
pixels[g] = pixels[g];
pixels[b] = pixels[b];
pixels[a] = pixels[a];
}
// create a new image from the modified pixel data
size_t width = CGImageGetWidth(imageRef);
size_t height = CGImageGetHeight(imageRef);
size_t bitsPerComponent = CGImageGetBitsPerComponent(imageRef);
size_t bitsPerPixel = CGImageGetBitsPerPixel(imageRef);
size_t bytesPerRow = CGImageGetBytesPerRow(imageRef);
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGBitmapInfo bitmapInfo = CGImageGetBitmapInfo(imageRef);
CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, pixels, [data length], NULL);
CGImageRef newImageRef = CGImageCreate (
width,
height,
bitsPerComponent,
bitsPerPixel,
bytesPerRow,
colorspace,
bitmapInfo,
provider,
NULL,
false,
kCGRenderingIntentDefault
// the modified image
UIImage *newImage = [UIImage imageWithCGImage:newImageRef];
imgView.image = newImage;
我也尝试过从此代码中拉伸(stretch)图像。
UIImage *stretchImage = [image stretchableImageWithLeftCapWidth:10 topCapHeight:10];
有人可以帮我吗?我没有找到任何框架或 SDK 可以为我提供此类功能。我用谷歌搜索了很长时间。
最佳答案
碰巧,我正在做的事情几乎与您现在为我们公司描述的事情完全一样。我们正在处理人脸问题,实际上这是一个更容易解决的问题。
这是一张之前的图片(真实的是你的)
这是“胖脸”变换:
我所做的是将图像导入 OpenGL 纹理,然后将该纹理应用到网格。我对网格应用了一组更改,将某些点挤得更近,并将其他点拉得更远。获得逼真的胖脸需要进行大量微调,但我认为结果相当不错。
一旦我计算出网格,OpenGL 就会完成图像转换的“繁重工作”,而且速度非常快。一切设置完毕后,实际绘制转换后的图像只需一次调用。
这是同一张图像,显示网格线:
Fat face with grid lines http://imageshack.com/a/img404/8049/afterwithlines.jpg
我花了几周的全职工作来完成基本的网格变形工作(对于一个失败的客户项目),然后又花了一周左右的时间来微调胖脸布局。将整个事情变成可销售的产品仍然是一项正在进行的工作。
我提出的算法足够快,可以将脂肪变换(以及各种其他变换)应用于来自 iOS 摄像头的全 30 FPS 视频输入。
为了进行此类图像处理,您需要了解三角函数、代数、指针数学、变换矩阵,并对如何编写高度优化的代码有深入的了解。
我正在使用 Apple 的新 Core Image 人脸识别代码来查找图像中的人脸特征,并使用眼睛和嘴巴的坐标作为转换的起点。
您的项目更加雄心勃勃。您必须进行一些认真的图像处理才能找到所有特征,描出它们的轮廓,然后弄清楚如何转换图像以获得令人信服的脂肪效果。您需要在严格控制的条件下摆好姿势、打光和拍摄的高分辨率源图像,才能获得良好的效果。
对于当前 iOS 设备的计算能力来说,这可能太过分了,而且你需要进行图像识别来找出 body 部位以及如何转换它们,这将是极其困难的。您可能想看看开源 OpenCV 项目,作为解决问题的图像识别部分的起点。
关于iphone - 如何在iPhone SDK中将瘦图变成胖图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10186200/