2 rgbの色と長方形の領域が与えられたら、色の間に基本的な線形勾配を生成したいと思います。私はすばやい検索を行いましたが、唯一見つけられたのはthis blog entryですが、サンプルコードが見つからないか、少なくともこの投稿の時点であったようです。何でも助け、アルゴリズム、コード例など。これはJavaで書かれていますが、表示レイヤーはすでに処理されているので、何を表示するかを理解する必要があります。プログラムでグラデーションを生成しますか?
答えて
第1色と第2色の間の補間が必要です。色を補間することは、その各成分(R、G、B)について同じ補間を計算することによって容易である。補間にはさまざまな方法があります。
R = firstCol.R * p + secondCol.R * (1 - p)
これに関連another questionあります: - 2番目のPちょうど最初の色とパーセンテージ1の割合Pを取る:最も簡単な線形補間を使用することです。
補間方法には、他の方法ではうまくいかない場合もあります。例えば、補間関数bell-shaped (sigmoidal)を使用すると、遷移がスムーズになります。
/EDIT:あらかじめ定義された機能を使用することを意味します。 OK、さらに簡単です。今リンクしたブログ投稿にPythonのサンプルコードがあります。
Javaでは、GradientPaint
を使用できます。基本AWTクラスを使用して
、あなたはこのような何かを行うことができます:
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class LinearGradient extends JPanel {
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Color color1 = Color.RED;
Color color2 = Color.BLUE;
int steps = 30;
int rectWidth = 10;
int rectHeight = 10;
for (int i = 0; i < steps; i++) {
float ratio = (float) i/(float) steps;
int red = (int) (color2.getRed() * ratio + color1.getRed() * (1 - ratio));
int green = (int) (color2.getGreen() * ratio + color1.getGreen() * (1 - ratio));
int blue = (int) (color2.getBlue() * ratio + color1.getBlue() * (1 - ratio));
Color stepColor = new Color(red, green, blue);
Rectangle2D rect2D = new Rectangle2D.Float(rectWidth * i, 0, rectWidth, rectHeight);
g2.setPaint(stepColor);
g2.fill(rect2D);
}
}
}
あなたはGradientPaintクラスに組み込まれて使用することができます。
void Paint(Graphics2D g, Regtangle r, Color c1, Color c2)
{
GradientPaint gp = new GradientPaint(0,0,c1,r.getWidth(),r.getHeight(),c2);
g.setPaint(gp);
g.fill(rect);
}
私はRMagick for thatを使用しています。単純なグラデーションに進む必要がある場合は、ImageMagickとそのラッパーの1つ(Javaの場合はRMagickやJMagickなど)が便利です。デビッド・クロウのexecllentの答えにフォローアップ
ページが利用できません........を参照してください。 – hyprfrcb
、ここでKotlinの実装例は、Java 1.6以上で
fun gradientColor(x: Double, minX: Double, maxX: Double,
from: Color = Color.RED, to: Color = Color.GREEN): Color {
val range = maxX - minX
val p = (x - minX)/range
return Color(
from.red * p + to.red * (1 - p),
from.green * p + to.green * (1 - p),
from.blue * p + to.blue * (1 - p),
1.0
)
}
- 1. カスタム名生成プログラムを作成しますか?
- 2. InfoPathフォームテンプレートをプログラムで生成しますか?
- 3. アンドロイドでグラデーションの枠線を作成しますか?
- 4. プログラムでデータグリッドにグラデーションを追加
- 5. 合成ポートレートモザイクをプログラムで生成する
- 6. イメージソースURLをプログラムで生成
- 7. どのプログラムが文法グラフを生成しますか?
- 8. Android、グラデーションの境界線を作成しますか?
- 9. ビデオをプログラムで作成しますか?
- 10. プログラムでUnicodeを作成しますか?
- 11. プログラムでJavaでアクションを生成する
- 12. automakeはプログラムでルール/使用マクロを生成します
- 13. プログラムで生成されたUIButtonsをドラッグアンドドロップします
- 14. Drupalは商取引クーポンをプログラムで生成します
- 15. PDFBoxでグラデーションをバックグラウンドで作成する
- 16. cssのCSS設定に基づいてグラデーションを生成する#
- 17. どのようにプログラムでキー押しイベントを生成できますか?
- 18. C Win32 DLLをプログラムで生成する
- 19. プログラムでredisインスタンスを生成する
- 20. 文書をプログラムで生成する
- 21. プログラムでキープレスを生成する方法
- 22. Haskellでプログラムを生成する
- 23. WebControlsをプログラムで生成する
- 24. 頂点をプログラムで生成する
- 25. プログラムでpptファイルを生成する
- 26. 値をプログラムで生成するscala
- 27. プログラムで生成されたuiwebviewのコンテンツをプログラムで生成されたUITabBarから変更する
- 28. Konquerorでグラデーションを作成する方法
- 29. Matplotlib - グラデーションを無効にしますか?
- 30. HerokuのNodeJSからプログラムで生成されたHTMLファイルを提供します
だ、それが描かれている方法をより細かく制御することができますて、LinearGradientPaintもあります。 http://java.sun.com/javase/6/docs/api/java/awt/LinearGradientPaint.html – Avrom