我想让用户在不限制大小的情况下选择照片,然后进行编辑.
我的想法是创建与用于编辑的屏幕尺寸相同的大照片的缩略图,然后,在编辑完成后,使用大照片进行在缩略图上执行的相同编辑.
当我UIGraphicsBeginImageContext
用来创建缩略图时,它会导致内存问题.
我知道由于硬件限制很难直接编辑整个大图像,所以我想知道是否有一种方法可以将大图像下采样到不到2048*2048而没有内存问题?
我发现有一个BitmapFactory
类可以inSampleSize
选择在Android平台上对照片进行下采样.怎么能在iOS上完成?
我手动创建了一个CGBitmapContext:
bitmapContext = CGBitmapContextCreate( myImageData, width, height, 8, 4 * width, colorSpace, kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big );
Run Code Online (Sandbox Code Playgroud)
并绘制一个图层:
[self.myView.layer renderInContext:bitmapContext];
Run Code Online (Sandbox Code Playgroud)
但是,在Retina上,我的图层仅渲染原始尺寸的一半.
在上面设置contentScaleFactor
属性UIView
不会改变任何东西.
这样做的正确方法是什么?
Objective-C答案很好,我使用MonoTouch作为参考.
我在UIImage上面写文字.Retina以波涛汹涌的方式显示字体.看起来像素加倍,我猜是正在发生的事情.如何将一个清晰的字体写入UIImage?
//context is a CGBitmapContext
context.SetFillColor (color.CGColor);
context.SelectFont (font.Name, font.PointSize, CGTextEncoding.MacRoman);
context.SetTextDrawingMode (CGTextDrawingMode.Fill);
context.ShowTextAtPoint (pt.X, pt.Y, text);
Run Code Online (Sandbox Code Playgroud)
我遇到了CGBitmapcontext的问题.我在创建带有"无效句柄"消息的CGBitmapContext时遇到错误.
这是我的代码:
var previewContext = new CGBitmapContext(null, (int)ExportedImage.Size.Width, (int)ExportedImage.Size.Height, 8, (int)ExportedImage.Size.Height * 4, CGColorSpace.CreateDeviceRGB(), CGImageAlphaInfo.PremultipliedFirst);
Run Code Online (Sandbox Code Playgroud)
谢谢;