If it's just us, it seems like an awful waste of space
Hmm, min of meer hetzelfde een keer gehad... ben ook wel benieuwd naar oplossing ..
Al wat geprobeerd met AffineTransform ?!
Al wat geprobeerd met AffineTransform ?!
Verwijderd
Laat eens wat code zien...
Als je een class maakt en daarin een buffered image als private field definieert en die aanmaakt in de constructor, dan kun je verder altijd gewoon daar de graphics vanaf halen. Het roteren kun je verder doen met een AffineTransform.
Tip: Java 2D API Graphics van Vincent J. Hardy is een aanrader !! (ISBN 0130142662)
Als je een class maakt en daarin een buffered image als private field definieert en die aanmaakt in de constructor, dan kun je verder altijd gewoon daar de graphics vanaf halen. Het roteren kun je verder doen met een AffineTransform.
Tip: Java 2D API Graphics van Vincent J. Hardy is een aanrader !! (ISBN 0130142662)
ik heb al eens zoiets ge asked op het forum, check de search functie maar eens als die weer werkt.
kee... VANGUH!!!Op dinsdag 27 november 2001 16:05 schreef jRobert het volgende:
Laat eens wat code zien...
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| ...
private BufferedImage bi;
...
public void paint( Graphics g )
{
Graphics2D g2 = (Graphics2D)g;
Graphics2D big = bi.createGraphics();
...
big.setColor( Color.green );
double puntx = 10;
double punty = 0;
double hoek1x = 10 + ( Math.sin( Math.toRadians(140) ) * 10 );
double hoek1y = 10 + ( Math.cos( Math.toRadians(140) ) * -10 );
double hoek2x = 10 + ( Math.sin( Math.toRadians(-140) ) * 10 );
double hoek2y = 10 + ( Math.cos( Math.toRadians(-140) ) * -10 );
big.drawLine( (int)puntx, (int)punty, (int)hoek1x, (int)hoek1y );
big.drawLine( (int)puntx, (int)punty, (int)hoek2x, (int)hoek2y );
big.drawLine( (int)hoek1x, (int)hoek1y, (int)hoek2x, (int)hoek2y );
...
g2.drawImage(bi,0,0,this );
g2.dispose();
}
public void rotate( double i )
{
Graphics2D big = bi.createGraphics();
big.rotate( i, 10, 10 );
big.drawImage(bi, 0,0,this );
big.dispose();
} |
Dat deels dus gedaan.. probleem is echter dat de attribuut bi (BufferedImage) null blijft. En er dus op de roteer regel een NullPointerException ontstaat omdat er geen Graphics2D object is...Als je een class maakt en daarin een buffered image als private field definieert en die aanmaakt in de constructor, dan kun je verder altijd gewoon daar de graphics vanaf halen. Het roteren kun je verder doen met een AffineTransform.
Kzal ff de docs induiken betreffende die AffineTransform..
Kzal eens kijken.. thx!Tip: Java 2D API Graphics van Vincent J. Hardy is een aanrader !! (ISBN 0130142662)
If it's just us, it seems like an awful waste of space
Het maken van een BufferedImage in de constructor is zinloos lijkt het...
De regel:
in de constructor levert nl die println in console op.
De regel:
code:
1
2
3
| bi = (BufferedImage)createImage(20, 20);
if( bi == null )
System.out.println("BufferedImage bi is null"): |
in de constructor levert nl die println in console op.
If it's just us, it seems like an awful waste of space
Ik begin te vermoeden dat het probleem is dat de paint() waarin de bi attribuut geset wordt niet klaar is op het moment dat ik gebruik wil maken van dat attribuut in een andere functie. Als ik nl een System.out.println() in de paint en in de rotate functie zet en ik show() het component eerst voordat ik ga roteren dan krijg ik toch eerste de println() van de rotate en dan pas die van de paint(). duss... hoe kan ik een methode compleet laten afronden voordat de volgende verder mag.?
If it's just us, it seems like an awful waste of space
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| public static BufferedImage rotate(BufferedImage input, double angle) {
int width = input.getWidth();
int height = input.getHeight();
BufferedImage output = new BufferedImage(width, height, input.getType());
double a0 = Math.cos(angle*Math.PI/180.0);
double b0 = Math.sin(angle*Math.PI/180.0);
double a1 = -b0, b1 = a0;
IntervalTimer timer = new IntervalTimer();
timer.start();
int rx, ry, n = 0;
for (int y = 0; y < height; ++y)
for (int x = 0; x < width; ++x) {
rx = (int) Math.round(a0*x + a1*y);
ry = (int) Math.round(b0*x + b1*y);
if (rx >= 0 && rx < width && ry >= 0 && ry < height)
output.setRGB(rx, ry, input.getRGB(x, y));
else
++n;
}
System.out.println("Rotation complete [" + timer.stop() + " sec]");
System.out.println(n + " pixels could not be mapped");
return output;
} |
Leuke oplossing.. maareh.. IntervalTimer zit niet in jdk1.3
Ik kan uitsluitend awt gebruiken...
En daarbij... waarom zou ik nu wel een BufferedImage hebben?
En daarbij... waarom zou ik nu wel een BufferedImage hebben?
If it's just us, it seems like an awful waste of space
IntervalTimer kan je weg latenOp woensdag 28 november 2001 15:02 schreef HurrI het volgende:
Leuke oplossing.. maareh.. IntervalTimer zit niet in jdk1.3Ik kan uitsluitend awt gebruiken...
[mental note]Op woensdag 28 november 2001 15:25 schreef Scorpion het volgende:
[..]
IntervalTimer kan je weg laten
Denk na voordat je iets zegt...
[/mental note]
If it's just us, it seems like an awful waste of space
Verwijderd
Als ik me niet vergis duurt het even voordat een image gecreerd is, deze word dan via een apparte thread gecreeerd. Je moet dus ff wachten totdat het image gecreeerd is. Kweet niet of je het image object gelijk na het aanmaken probeerd te benaderen want dan kun je dat probleem wel eens hebben.
Dat probeer ik idd... is er een manier om te w88 totdat de image gemaakt is en dan pas verder met de rest van de code?Op donderdag 29 november 2001 00:44 schreef Reneos het volgende:
Als ik me niet vergis duurt het even voordat een image gecreerd is, deze word dan via een apparte thread gecreeerd. Je moet dus ff wachten totdat het image gecreeerd is. Kweet niet of je het image object gelijk na het aanmaken probeerd te benaderen want dan kun je dat probleem wel eens hebben.
If it's just us, it seems like an awful waste of space
Pagina: 1