DIAVIS-wiki
開始行:
[[java/画像関連]]
#contents
----
*任意の文字の形を操作する [#f9194e68]
**Glyphを取り出す。 [#d17a821d]
GlyphVector glyph = font.createGlyphVector(new FontRende...
**GlyphからShapeを取り出す。 [#s2a60117]
//グリフを取得する文字を文字列の中からIndexで指定
Shape outline = glyph.getGlyphOutline(m);
**Shapeを複数の描画セグメントに分割する。 [#w3f4a378]
AffineTransform at = new AffineTransform();
at.translate(x,y);
PathIterator iter = outline.getPathIterator(at);
float coords[] = new float[6]; //取得用、PathIteratorのc...
int type;
int char_counter = 0;
while ( !iter.isDone() ) {
/*
* 個々の描画セグメントを1つずつ取り出し、その描画方法...
*
* 描画方法の種類としては、
* SEG_MOVETO (ペンの移動)
* SEG_LINETO (線分の描画)
* SEG_CUBICTO (3点指定のベジエ曲線の描画)
* SEG_QUADTO (2点指定のベジエ曲線の描画)
* SEG_CLOSE (最初の点に戻る)
* がある。
*/
type = iter.currentSegment(coords);
int z = 0;
Point p;
float[] fs = new float[6];
lists[m].add( new SegmentObject( this, type, coords.clon...
switch ( type ) {
case PathIterator.SEG_CLOSE:
paths[m].closePath();
break;
case PathIterator.SEG_CUBICTO:
for ( int i = 0 ; i < 6 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
//points.add(new Point3d((int)coords[i],(int)coords[i...
}
paths[m].curveTo(fs[0],fs[1],fs[2],fs[3],fs[4],fs[5]);
break;
case PathIterator.SEG_LINETO:
for ( int i = 0 ; i < 2 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].lineTo(fs[0],fs[1]);
break;
case PathIterator.SEG_MOVETO:
for ( int i = 0 ; i < 2 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].moveTo(fs[0],fs[1]);
break;
case PathIterator.SEG_QUADTO:
//System.out.println("QUADTO :");
for ( int i = 0 ; i < 4 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].quadTo(fs[0],fs[1],fs[2],fs[3]);
break;
}
iter.next();
}
*サンプル [#vf1b315e]
-[[044_Reconstruct_Typo[044_Reconstruct_Typo.zip]:http://...
終了行:
[[java/画像関連]]
#contents
----
*任意の文字の形を操作する [#f9194e68]
**Glyphを取り出す。 [#d17a821d]
GlyphVector glyph = font.createGlyphVector(new FontRende...
**GlyphからShapeを取り出す。 [#s2a60117]
//グリフを取得する文字を文字列の中からIndexで指定
Shape outline = glyph.getGlyphOutline(m);
**Shapeを複数の描画セグメントに分割する。 [#w3f4a378]
AffineTransform at = new AffineTransform();
at.translate(x,y);
PathIterator iter = outline.getPathIterator(at);
float coords[] = new float[6]; //取得用、PathIteratorのc...
int type;
int char_counter = 0;
while ( !iter.isDone() ) {
/*
* 個々の描画セグメントを1つずつ取り出し、その描画方法...
*
* 描画方法の種類としては、
* SEG_MOVETO (ペンの移動)
* SEG_LINETO (線分の描画)
* SEG_CUBICTO (3点指定のベジエ曲線の描画)
* SEG_QUADTO (2点指定のベジエ曲線の描画)
* SEG_CLOSE (最初の点に戻る)
* がある。
*/
type = iter.currentSegment(coords);
int z = 0;
Point p;
float[] fs = new float[6];
lists[m].add( new SegmentObject( this, type, coords.clon...
switch ( type ) {
case PathIterator.SEG_CLOSE:
paths[m].closePath();
break;
case PathIterator.SEG_CUBICTO:
for ( int i = 0 ; i < 6 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
//points.add(new Point3d((int)coords[i],(int)coords[i...
}
paths[m].curveTo(fs[0],fs[1],fs[2],fs[3],fs[4],fs[5]);
break;
case PathIterator.SEG_LINETO:
for ( int i = 0 ; i < 2 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].lineTo(fs[0],fs[1]);
break;
case PathIterator.SEG_MOVETO:
for ( int i = 0 ; i < 2 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].moveTo(fs[0],fs[1]);
break;
case PathIterator.SEG_QUADTO:
//System.out.println("QUADTO :");
for ( int i = 0 ; i < 4 ; i+=2 ) {
fs[i] = coords[i];
fs[i+1] = coords[i+1];
}
paths[m].quadTo(fs[0],fs[1],fs[2],fs[3]);
break;
}
iter.next();
}
*サンプル [#vf1b315e]
-[[044_Reconstruct_Typo[044_Reconstruct_Typo.zip]:http://...
ページ名: