感谢您的时间。
在点击图像之前图像很好,然后在点击图像后压缩图像。
这是我的代码:
我没有使用故事板,所以我使用代码创建所有内容,这里是ImageView。我还在代码中添加了约束。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation
n = 21
x = np.linspace(-1.0, 1.0, num=n)
q = plt.quiver(x[:1], [0], [1], [0])
def animate(i):
q.set_offsets([[x[i], 0]])
return q,
plt.gca().set_xlim([-1, 1])
anim = matplotlib.animation.FuncAnimation(plt.gcf(), animate, frames=n,
repeat=True, blit=True)
plt.show()
#anim.save('anim.gif', dpi=80, writer='imagemagick')
#anim.save('anim.mp4', dpi=80, writer='ffmpeg')
答案 0 :(得分:0)
我不知道“压缩”是什么意思,但我猜测图像会以某种方式被破坏,因为当您将图像转换为CGContext
并返回图像时,某些数据会丢失。
我不知道如何解决这个问题,但我只是通过在CAShapeLayer
中添加UIImageView
作为子图层来解决这个问题,然后以一种形式绘制你想要的内容。 CGPath
。语法与您现在使用的语法非常相似,并且可能不支持的唯一效果是混合模式,但您可以使用具有较低alpha值的另一个层重新创建此语法。
这就是它的样子。
var drawingLayer = CAShapeLayer()
func drawLines(fromPoint: CGPoint, toPoint: CGPoint) {
let mutable = CGMutablePath()
mutable.move(to: fromPoint)
mutable.addline(to: toPoint)
drawingLayer.path = mutable
drawingLayer.fillColor = nil
drawingLayer.lineCap = kCALineCapRound
drawingLayer.lineCap = 120 * CGFloat(lineWidthSliderView.value)
//the bit in your code translated the whole thing to Int before translating it to a
//CGFloat, this is a bad idea since Ints cannot store decimals, so if there is no
//direct conversion, convert it to Double or Float
drawingLayer.strokeColor = UIColor(calibratedRed: red/255, green: green/255, blue: blue/255 , alpha: 1).cgColor
}
某处您还需要imageEditingView.addSubLayer(drawingLayer)
另外,当您执行context.move(to:)
和其他地方时,您不需要将CGPoint转换为另一个CGPoint ......