Với 2 màu rgb và một vùng hình chữ nhật, tôi muốn tạo ra một gradient tuyến tính cơ bản giữa các màu. Tôi đã thực hiện tìm kiếm nhanh và điều duy nhất tôi có thể tìm thấy là this blog entry, nhưng mã ví dụ dường như bị thiếu hoặc ít nhất là do bài đăng này. Bất cứ điều gì giúp, các thuật toán, ví dụ mã, bất cứ điều gì. Điều này sẽ được viết bằng Java, nhưng lớp hiển thị đã được xử lý, tôi chỉ cần tìm ra cách để tìm ra những gì để hiển thị.Tạo gradients theo lập trình?
Trả lời
bạn muốn có nội suy giữa màu đầu tiên và màu thứ hai. Việc nội suy màu sắc dễ dàng bằng cách tính toán cùng một nội suy cho mỗi thành phần của nó (R, G, B). Có nhiều cách để nội suy. Cách đơn giản nhất là sử dụng phép nội suy tuyến tính: chỉ cần lấy tỷ lệ p màu đầu tiên và tỷ lệ phần trăm 1-p của thứ hai:
R = firstCol.R * p + secondCol.R * (1 - p)
Có another question liên quan đến này.
Có các phương pháp nội suy khác đôi khi hoạt động tốt hơn. Ví dụ: sử dụng hàm nội suy bell-shaped (sigmoidal) làm cho quá trình chuyển đổi mượt mà hơn.
/EDIT: Rất tiếc, bạn có nghĩa là sử dụng hàm được xác định trước. OK, thậm chí dễ dàng hơn. Bài đăng trên blog bạn đã liên kết hiện có mã ví dụ bằng Python.
Trong Java, bạn có thể sử dụng GradientPaint
.
Sử dụng các lớp AWT cơ bản, bạn có thể làm một cái gì đó như thế này:
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);
}
}
}
Bạn có thể sử dụng được xây dựng trong GradientPaint lớp.
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);
}
Tôi đã sử dụng RMagick for that. Nếu bạn cần phải đi xa hơn các gradient đơn giản, ImageMagick và một trong các trình bao bọc của nó (như RMagick hoặc JMagick cho Java) có thể hữu ích.
Trang không khả dụng ........ – hyprfrcb
Theo dõi trên câu trả lời Execllent của David Crow, đây là một ví dụ Kotlin thực hiện
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. Tạo cửa sổ HUD theo lập trình
- 2. Cách tạo NSPopover theo lập trình
- 3. Tạo biểu đồ màu theo lập trình?
- 4. C# tạo báo cáo theo lập trình
- 5. Tạo NSMenuItems theo lập trình trong MonoMac
- 6. Tạo Cuộc họp Exchange theo Lập trình
- 7. Gradients trên Flot
- 8. Màu Gradients Với ggplot
- 9. Tạo lập trình UIButtons theo cách lập trình và liên kết những người có IBAction
- 10. Android: Cách tạo GridLayout [không phải GridView] theo lập trình?
- 11. Tạo PDF theo cách có lập trình từ trang web
- 12. Android - tạo lập trình xem theo tiến độBar
- 13. Làm cách nào để tạo UIScrollView theo lập trình?
- 14. Tạo hộp kiểm theo cách lập trình bằng Cocoa
- 15. Tạo trang web HTML theo lập trình trong C#
- 16. Tạo danh sách thuộc tính từ điển theo lập trình
- 17. Làm cách nào để tạo ColorStateList theo lập trình?
- 18. cách tạo nút trong uiview theo lập trình trong iphone
- 19. Cách tạo biểu mẫu Dojo dijoit theo cách lập trình
- 20. CSS Gradients - Ít Mixins
- 21. Đặt NSIndexPath theo lập trình
- 22. hủy UIAlertView theo lập trình
- 23. Lập trình ngắt raw_input theo cách có lập trình
- 24. Lập trình nhãn nhiều dòng theo cách lập trình
- 25. Tạo ListView lập trình
- 26. Làm nhạc theo lập trình trên iPhone?
- 27. Thay đổi loại UIButton theo lập trình
- 28. Đánh giá mẫu Ember theo lập trình
- 29. tạo lập trình một UILabel
- 30. Đặt cuộn uitextview theo lập trình
Trong Java 1.6 và lên, đó cũng là LinearGradientPaint đó cho phép kiểm soát tốt hơn cách nó được sơn. Xem http://java.sun.com/javase/6/docs/api/java/awt/LinearGradientPaint.html – Avrom