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. InfoPathフォームテンプレートをプログラムで生成しますか?
- 2. アンドロイドでグラデーションの枠線を作成しますか?
- 3. イメージソースURLをプログラムで生成
- 4. どのプログラムが文法グラフを生成しますか?
- 5. プログラムでJavaでアクションを生成する
- 6. Drupalは商取引クーポンをプログラムで生成します
- 7. プログラムで生成されたUIButtonsをドラッグアンドドロップします
- 8. automakeはプログラムでルール/使用マクロを生成します
- 9. ビデオをプログラムで作成しますか?
- 10. cssのCSS設定に基づいてグラデーションを生成する#
- 11. どのようにプログラムでキー押しイベントを生成できますか?
- 12. WebControlsをプログラムで生成する
- 13. プログラムでredisインスタンスを生成する
- 14. C Win32 DLLをプログラムで生成する
- 15. 文書をプログラムで生成する
- 16. Haskellでプログラムを生成する
- 17. プログラムでキープレスを生成する方法
- 18. OpenGL Cプログラムからビデオを生成
- 19. tivoli Omnibusプローブ・ルール・プログラムは複数のイベントを生成します
- 20. IE9用にColorzillaで生成されたSVGグラデーションを使用する必要がありますか?
- 21. javascriptでメニューを生成しますか?
- 22. phpでキャッシュファイルを生成しますか?
- 23. JUnitテストケースとスイートをプログラムで生成することはできますか?
- 24. iPhone iOSスター、サンバースト、またはポリゴンをプログラムで生成する
- 25. スウィフトナビゲーションバーで "<戻る"を生成できませんプログラムで
- 26. Javaでユーザが定義した行列を生成するプログラム
- 27. Javaプログラムのコールグラフを生成する - Eclipse
- 28. VMで実行中のプログラム生成エラー
- 29. ROWLEXを使用してOWLファイルからアセンブリをプログラムで生成する
- 30. TFS APIとSSRSを使用してプログラムでレポートを生成
だ、それが描かれている方法をより細かく制御することができますて、LinearGradientPaintもあります。 http://java.sun.com/javase/6/docs/api/java/awt/LinearGradientPaint.html – Avrom