ich versuche gerade ein bild zu spiegeln und dann noch mit einem gradienten als hintergrund auszugrauen;
als vorlage für pattern (was den teil des gradienten übernimmt...) hab ich Snippet200 genommen.
spiegeln funktioniert bestens, doch das pattern wird nicht gemacht...
was genau in meinem control passiert:
image wird zugewiesen.
dann wird davon ein imgResized erstellt (skaliert)
dann wird davon ein imgReflection erstellt (skaliert & gespiegelt -> da soll noch der gradient rauf!)
und hier ist der code der alles zaubern sollte...
kann jemand sehen was ich falsch mache?
als vorlage für pattern (was den teil des gradienten übernimmt...) hab ich Snippet200 genommen.
spiegeln funktioniert bestens, doch das pattern wird nicht gemacht...
was genau in meinem control passiert:
image wird zugewiesen.
dann wird davon ein imgResized erstellt (skaliert)
dann wird davon ein imgReflection erstellt (skaliert & gespiegelt -> da soll noch der gradient rauf!)
und hier ist der code der alles zaubern sollte...
Java:
Point imgSize = new Point(getImage().getBounds().width, getImage()
.getBounds().height);
rectResized.x = borderSize;
rectResized.y = borderSize;
int imgWidth = getClientArea().width - borderSize * 2;
rectResized.width = imgWidth;
double ratioImg = (double) rectResized.width / (double) imgSize.x;
rectResized.height = (int) Math.round(imgSize.y * ratioImg);
rectReflection.x = borderSize;
rectReflection.y = (borderSize + rectResized.height);
rectReflection.width = imgWidth;
rectReflection.height = (int) (rectResized.height * this.reflectionHeight);
if (imgResized != null) {
imgResized.dispose();
}
imgResized = new Image(getParent().getDisplay(), image.getImageData()
.scaledTo(rectResized.width, rectResized.height));
if (imgReflection != null) {
imgReflection.dispose();
}
imgReflection = new Image(getParent().getDisplay(), imgResized
.getImageData().scaledTo(rectReflection.width,
rectReflection.height));
// sample code from
// [url=http://www.java2s.com/Tutorial/Java/0300__SWT-2D-Graphics/TransformReflectaroundthexyaxis.htm]Transform: Reflect around the x/y axis. : TransformSWT 2D GraphicsJava Tutorial[/url]
int x = 0, y = 0;
GC gc = new GC(imgReflection);
// Reflect around the x axis.
Transform tr = new Transform(getParent().getDisplay());
tr.setElements(1, 0, 0, -1, 0, 0);
gc.setTransform(tr);
gc.drawImage(imgReflection, x, -1 * y - rectReflection.height);
gc.setTransform(null);
tr.dispose();
// works till here!
try {
gc.setClipping(borderSize, rectResized.y + rectResized.height, rectReflection.width, rectReflection.height);
Color background = gc.getBackground(); // white
Pattern p = new Pattern(gc.getDevice(), borderSize, rectResized.y, borderSize, borderSize + rectResized.height + rectReflection.height, background, 0, background, 255);
gc.setBackgroundPattern(p);
gc.fillRectangle(borderSize, rectReflection.y, rectReflection.width, rectReflection.height);
p.dispose();
gc.setClipping(0,0,0,0);
} catch (SWTException e) {
// Advanced Graphics not supported.
// This new API requires the Cairo Vector engine on GTK and Motif
// and GDI+ on Windows.
System.out.println(e.getMessage());
gc.dispose();
return;
}
gc.dispose();