This commit is contained in:
153
java/src/javazoom/jlgui/player/amp/skin/Taftb.java
Normal file
153
java/src/javazoom/jlgui/player/amp/skin/Taftb.java
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* Taftb.
|
||||
*
|
||||
* JavaZOOM : jlgui@javazoom.net
|
||||
* http://www.javazoom.net
|
||||
*
|
||||
*-----------------------------------------------------------------------
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Library General Public License as published
|
||||
* by the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
package javazoom.jlgui.player.amp.skin;
|
||||
|
||||
import java.awt.Image;
|
||||
import java.awt.image.CropImageFilter;
|
||||
import java.awt.image.FilteredImageSource;
|
||||
import java.awt.image.MemoryImageSource;
|
||||
import java.awt.image.PixelGrabber;
|
||||
import javax.swing.JComponent;
|
||||
|
||||
/**
|
||||
* Taftb is used to build gif image from graphical fonts.
|
||||
*/
|
||||
public class Taftb extends JComponent
|
||||
{
|
||||
public Image theFonts;
|
||||
private int imageW;
|
||||
private int fontWidth;
|
||||
private int fontHeight;
|
||||
private int Yspacing;
|
||||
protected Image theBanner;
|
||||
protected int pixels[];
|
||||
private PixelGrabber pg;
|
||||
private String theText;
|
||||
|
||||
/**
|
||||
* Text banner building according to the alphabet index, font size and Y spacing.
|
||||
*/
|
||||
public Taftb(String alphaIndex, Image fontFile, int fontW, int fontH, int Yspc, String theTxt/*, Color BgValue*/)
|
||||
{
|
||||
fontWidth = fontW;
|
||||
fontHeight = fontH;
|
||||
Yspacing = Yspc;
|
||||
theText = theTxt;
|
||||
theFonts = fontFile;
|
||||
imageW = theFonts.getWidth(this);
|
||||
/*-- We create the TextBanner by grabbing font letters in the image fonts --*/
|
||||
pixels = new int[theText.length() * fontW * fontH];
|
||||
int SpacePosition = 0;
|
||||
int offsetSp = 0;
|
||||
/*-- We search the space position in the Alphabet index --*/
|
||||
while ((offsetSp < alphaIndex.length()) && (alphaIndex.charAt(offsetSp) != ' '))
|
||||
{
|
||||
offsetSp++;
|
||||
}
|
||||
if (offsetSp < alphaIndex.length()) SpacePosition = offsetSp;
|
||||
for (int offsetT = 0; offsetT < theText.length(); offsetT++)
|
||||
{
|
||||
int xPos = 0;
|
||||
int yPos = 0;
|
||||
int reste = 0;
|
||||
int entie = 0;
|
||||
int offsetA = 0;
|
||||
int FontPerLine = (int) Math.rint((imageW / fontW));
|
||||
/*-- We search the letter's position in the Alphabet index --*/
|
||||
while ((offsetA < alphaIndex.length()) && (theText.charAt(offsetT) != alphaIndex.charAt(offsetA)))
|
||||
{
|
||||
offsetA++;
|
||||
}
|
||||
/*-- We deduce its image's position (Int forced) --*/
|
||||
if (offsetA < alphaIndex.length())
|
||||
{
|
||||
reste = offsetA % FontPerLine;
|
||||
entie = (offsetA - reste);
|
||||
xPos = reste * fontW;
|
||||
yPos = ((entie / FontPerLine) * fontH) + ((entie / FontPerLine) * Yspacing);
|
||||
}
|
||||
else
|
||||
/*-- If the letter is not indexed the space (if available) is selected --*/
|
||||
{
|
||||
reste = SpacePosition % FontPerLine;
|
||||
entie = (SpacePosition - reste);
|
||||
xPos = reste * fontW;
|
||||
yPos = ((entie / FontPerLine) * fontH) + ((entie / FontPerLine) * Yspacing);
|
||||
}
|
||||
/*-- We grab the letter in the font image and put it in a pixel array --*/
|
||||
pg = new PixelGrabber(theFonts, xPos, yPos, fontW, fontH, pixels, offsetT * fontW, theText.length() * fontW);
|
||||
try
|
||||
{
|
||||
pg.grabPixels();
|
||||
}
|
||||
catch (InterruptedException e)
|
||||
{
|
||||
}
|
||||
}
|
||||
/*-- We create the final Image Banner throught an Image --*/
|
||||
theBanner = createImage(new MemoryImageSource(theText.length() * fontW, fontH, pixels, 0, theText.length() * fontW));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns final banner as an image.
|
||||
*/
|
||||
public Image getBanner()
|
||||
{
|
||||
return theBanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns final banner as cropped image.
|
||||
*/
|
||||
public Image getBanner(int x, int y, int sx, int sy)
|
||||
{
|
||||
Image cropBanner = null;
|
||||
CropImageFilter cif = new CropImageFilter(x, y, sx, sy);
|
||||
cropBanner = createImage(new FilteredImageSource(theBanner.getSource(), cif));
|
||||
return cropBanner;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns final banner as a pixels array.
|
||||
*/
|
||||
public int[] getPixels()
|
||||
{
|
||||
return pixels;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns banner's length.
|
||||
*/
|
||||
public int getPixelsW()
|
||||
{
|
||||
return theText.length() * fontWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns banner's height.
|
||||
*/
|
||||
public int getPixelsH()
|
||||
{
|
||||
return fontHeight;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user