а ве имам въпросче към GradientPaint ако някой е използвал
въпроса ми е когато го сложа за backGround всичко е окей той има 6 аргументен конструктор
GradientPaint background = new GradientPaint(
0f, 0f, Color.GRAY.darker(),
0f, 140, Color.BLACK.brighter());
аз го разбирам като от какъв цвят и къде да почне градиент-а.
в случая това изглежда така :
което е СУПЕР
обаче проблема идва когато искам да имам текст + картинка който да градиентвам по някакъв начин самите тях по скоро искам да създам нещо като (mask) в контекст на photoshop в/у тях и нямам идея как да стане...
идеята е да получа нещо такова :
(Създадено с Tool ( Photoshop like )
ако забелязвате долния Reflection text + картинката са с градиент в/у тях
е как да стане тази мизерия
пробвах така :
import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;
import org.freehep.swing.graphics.PanelArtistUtilities;
public class Canvascho extends JComponent
{
private BufferedImage image;
public Canvascho()
{
try
{
image=ImageIO.read(new File("D:\\My Documents\\JLOGO.png"));
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
Graphics2D g2d = (Graphics2D)g;
AffineTransform defaultTransform=g2d.getTransform();
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
// Paint a gradient for the sky
GradientPaint background = new GradientPaint(
0f, 0f, Color.GRAY.darker(),
0f, 140, Color.BLACK.brighter());
g2d.setPaint(background);
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setFont(new Font("Arial",Font.PLAIN,48));
g2d.setColor(Color.white);
String theString="JOKe";
// g2d.drawString(theString, 100, 100);
// AffineTransform rotate=AffineTransform.getScaleInstance(-0.3, 1);
// g2d.transform(rotate);
g2d.drawString(theString, 100, 100);
g2d.drawImage(image, 220, 36,null);
g2d.transform(PanelArtistUtilities.getYFlipTransform(203));
g2d.drawRect(20,40,310,250);
GradientPaint fill = new GradientPaint(
0f, 0f, Color.WHITE.darker(),
0f, 48, Color.GRAY.brighter());
g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.3f));
g2d.setPaint(fill);
g2d.drawString(theString, 100, 100);
g2d.drawImage(image, 220, 36,null);
}
public static void main(String[] args)
{
JFrame frame=new JFrame();
frame.setLayout(new BorderLayout());
frame.add(new Canvascho(),BorderLayout.CENTER);
frame.setSize(500,500);
frame.setVisible(true);
}
}
Резултата е :
както се вижда доло има alpha fade от AlphaComposite-a ама няма Gradient ..
Явно тънкия момент е в :
GradientPaint fill = new GradientPaint(
0f, 0f, Color.WHITE.darker(),
0f,
48, Color.GRAY.brighter());
но незнам спрямо какво да го смятам тъй като съм FLIPнал всичко.
( ако някой ще компилира за глупавия Filp му трябва
http://java.freehep.org/maven2/org/freehep/freehep-swing/2.0.3/freehep-swing-2.0.3.jar )
Може и без него ама математиката ми куца и не ми се мислише
та я обяаснете този параметър на градиеннт-а за какво е ? това спрямо Clip-a на самия компонент ли е или е за самия него смисъл ако имам нещо намиращо се на 100,100 ширина 100 и височина 100 и напиша че градиента почва от 120 120 ще почне от 20 в него или от 120 в него т.е. някъде отдоло и няма да се види.