我在我的iOS项目中创建了一个自定义UIView,它有一个投影.我的目标是将相同的渐变应用于阴影,就像在视图的背景上一样.
下面是我当前纯色阴影的外观示例.
override func layoutSubviews() {
let gradientLayer = layer as! CAGradientLayer
gradientLayer.colors = [topColor.cgColor, bottomColor.cgColor]
gradientLayer.startPoint = CGPoint(x: startPointX, y: startPointY)
gradientLayer.endPoint = CGPoint(x: endPointX, y: endPointY)
layer.cornerRadius = cornerRadius
layer.shadowColor = shadowColor.cgColor
layer.shadowOffset = CGSize(width: shadowX, height: shadowY)
layer.shadowRadius = shadowBlur
layer.shadowOpacity = 1
let inset: CGFloat = bounds.width * 0.05
layer.shadowPath = UIBezierPath(roundedRect: bounds.insetBy(dx: inset, dy: 0.0), cornerRadius: cornerRadius).cgPath
}
Run Code Online (Sandbox Code Playgroud)
我一直在玩创建第二个渐变层并将其遮盖到阴影中,但没有运气.请指出我正确的方向!
我试图使用Raphael JS图形库.我想使用属性梯度,它应该接受一个对象.文档说参考SVG规范.例如,我在SVG中找到了渐变对象
<linearGradient id="myFillGrad" x1="0%" y1="100%" x2="100%" y2="0%">
<stop offset="5%" stop-color="red" />
<stop offset="95%" stop-color="blue" stop-opacity="0.5" />
</linearGradient>
Run Code Online (Sandbox Code Playgroud)
但我如何从我的JavaScript中引用它?
circle.attr("gradient", "myFillGrad");
Run Code Online (Sandbox Code Playgroud)
不起作用:)提前谢谢
我正在尝试在HSV颜色空间中插入两种颜色之间以产生平滑的颜色渐变.
我正在使用线性插值,例如:
h = (1 - p) * h1 + p * h2
s = (1 - p) * s1 + p * s2
v = (1 - p) * v1 + p * v2
Run Code Online (Sandbox Code Playgroud)
(其中p是百分比,h1,h2,s1,s2,v1,v2是两种颜色的色调,饱和度和值分量)
这对s和v产生了良好的结果,但对于h则没有.由于色调分量是一个角度,计算需要计算出h1和h2之间的最短距离,然后沿正确的方向(顺时针或逆时针)进行插值.
我应该使用什么公式或算法?
编辑:通过遵循杰克的建议我修改了我的JavaScript渐变功能,它运作良好.对于任何有兴趣的人,这是我最终得到的:
// create gradient from yellow to red to black with 100 steps
var gradient = hsbGradient(100, [{h:0.14, s:0.5, b:1}, {h:0, s:1, b:1}, {h:0, s:1, b:0}]);
function hsbGradient(steps, colours) {
var parts = colours.length - 1;
var gradient = new Array(steps);
var …Run Code Online (Sandbox Code Playgroud) 我想在图像上实现alpha渐变.从图像顶部的0.5 alfa到底部的0.0.欢迎任何建议,教程和链接.
我只是想为我的Android应用程序实现一个颜色选择器,并在Android 4.1.1上遇到了一个奇怪的问题.以下代码不会在Android 4.1.1上创建预期的渐变,但它在2.3.7上创建:
Shader fadeInRight = new LinearGradient(0, 0, pWidth, 0, 0x00000000, 0xFF000000, Shader.TileMode.CLAMP);
Shader blackToWhite = new LinearGradient(0, 0, 0, pHeight, 0xFF000000, 0xFFFFFFFF, Shader.TileMode.CLAMP);
Shader whiteMask = new ComposeShader(blackToWhite, fadeInRight, PorterDuff.Mode.DST_IN);
Shader blackToColor = new LinearGradient(0, 0, pWidth, 0, 0xFF000000, hue, Shader.TileMode.CLAMP);
Shader shader = new ComposeShader(blackToColor, whiteMask, PorterDuff.Mode.SCREEN);
paint.setShader(shader);
...
canvas.drawRect(new Rect(0, 0, pWidth, pHeight), paint);
Run Code Online (Sandbox Code Playgroud)
这是问题所在:

(忽略Android 4.1.1下面的红色框.我只是谈论上面的渐变)
任何想法有什么不对?我认为我的代码中缺少一些东西,但我不知道,是什么.
编辑#1:
如果我只是用whiteMask了setShader,我也得到了两个系统不同的结果:通过梯度矩形照着2.3.7我可以看到配置菜单(这是弹出后面)的文本.此外,从左上边缘到右下边缘(黑色到白色)有一个渐变,但4.1.1上的渐变从左到右水平.所以这似乎是一个问题ComposeShader
编辑#2: 我找到了一个更简单的例子来描述这个问题:
Shader shader1 = new LinearGradient(0, 0, 0, …Run Code Online (Sandbox Code Playgroud) 根据我读过的内容,您可以使用gradientDrawable并为其设置三种颜色,例如:
<gradient startColor="#00FF00" centerColor="#FFFF00" endColor="#FFFFFF"/>
Run Code Online (Sandbox Code Playgroud)
但是,如果我想要超过三种颜色,不仅如此,我希望能够设置每个颜色的位置(重量/百分比)?
是否可以使用API或我应该制作自己的自定义drawable?如果我需要制作自己定制的可绘制的,我应该怎么做?
我知道如何绘制弧线
我还发现了如何从这里绘制渐变线 我发现两个函数可以绘制渐变:CGContextDrawLinearGradient和CGContextDrawRadialGradient.but如何绘制渐变弧?我想像这张照片一样意识到:
我试图<hr>用SVG 复制一个.现在,使用SVG制作一条直线可以完美地工作,但是第二个我用渐变划线它将不再以直线显示.
以下代码有效,但请注意,y1和y2必须相隔1个单位.例如,如果我将y1和y2设置为210,则该行将消失.
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:rgba(0,0,0,0);stop-opacity:0" />
<stop offset="50%" style="stop-color:rgba(0,0,0,0.75);stop-opacity:1" />
<stop offset="100%" style="stop-color:rgba(0,0,0,0);stop-opacity:0" />
</linearGradient>
</defs>
<line x1="40" y1="210" x2="460" y2="211" stroke="url(#grad1)" stroke-width="1" />
Run Code Online (Sandbox Code Playgroud)
我可能只是错过了线性渐变的一些明显功能,而且线条看起来还不错,但我更倾向于让它笔直.谢谢.
我正在尝试使用TensorFlow实现异步参数服务器DistBelief样式.我发现minimize()被分成两个函数,compute_gradients和apply_gradients,所以我的计划是在它们之间插入一个网络边界.我有一个关于如何同时评估所有渐变并将它们全部拉出来的问题.我知道eval只评估必要的子图,但它也只返回一个张量,而不是计算张量所需的张量链.
我怎样才能更有效地做到这一点?我把Deep MNIST的例子作为起点:
import tensorflow as tf
import download_mnist
def weight_variable(shape, name):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial, name=name)
def bias_variable(shape, name):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial, name=name)
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')
mnist = download_mnist.read_data_sets('MNIST_data', one_hot=True)
session = tf.InteractiveSession()
x = tf.placeholder("float", shape=[None, 784], name='x')
x_image = tf.reshape(x, [-1,28,28,1], name='reshape')
y_ = tf.placeholder("float", shape=[None, 10], name='y_')
W_conv1 = weight_variable([5, …Run Code Online (Sandbox Code Playgroud) 我正在使用TensorFlow构建一个深度学习模型.TensorFlow的新手.
由于某种原因,我的模型具有有限的批量大小,然后这种有限的批量大小将使模型具有高的方差.
所以,我想用一些技巧来增加批量.我的想法是存储每个小批量的渐变,例如64个小批量,然后将渐变相加,使用这64个小批量训练数据的平均梯度来更新模型的参数.
这意味着对于前63个小批量,不更新参数,并且在64小批量之后,仅更新模型的参数一次.
但由于TensorFlow是基于图形的,有谁知道如何实现这个想要的功能?
非常感谢.