2013-08-08 38 views
5

Podczas wykonywania zrzutu ekranu mojej sceny w JavaFx, zapisuję BufferedImage w pliku jako PNG/JPG. Kiedy próbuję zmaksymalizować rozmiar obrazu do pełnej długości, otrzymuję czarne ramki na obrazie od lewej strony obrazu do dołu, bez powiększania obrazu w ogóle. Rozmiar obrazu zwiększa się tylko do momentu, w którym ustawię moje wymiary na 1300 x 700, jak pokazano poniżej.Niepożądane czarne obramowania przy próbie powiększenia obrazu do pełnego rozmiaru

BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 

Jednak po zwiększeniu wymiarów większych niż 1300 x 700 pojawiają się czarne ramki.

Poniższy obraz jest ustawiony na

BufferedImage image = new BufferedImage(1500, 900, BufferedImage.TYPE_INT_RGB); 

enter image description here

Jak widać, część obrazu jest nadal odcięta i obecnie istnieje duże czarne obramowanie obok obrazu zamiast rzeczywisty obraz w pełnym rozmiarze.

Poniższy obraz jest ustawiony na

BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 

enter image description here

Jak widać, obraz jest nadal odcięta w tym samym miejscu co wcześniej, ale nie czarne obramowanie wzdłuż boku z nim.

Jak mogę dopasować całą migawkę mojej obecnej sceny do jednego pliku bez tych granic i bez obcięcia zawartości?

Oto mój kod:

File fa = new File("test.jpg"); 
    snapshot = quotes.getScene().snapshot(null); 

    RenderedImage renderedImage = SwingFXUtils.fromFXImage(snapshot, null); 
    BufferedImage image = new BufferedImage(1300, 700, BufferedImage.TYPE_INT_RGB); 
    image.setData(renderedImage.getData()); 
    ImageIO.write(image, "jpg", fa); 
+0

spróbuj ustawić WritableImage jako parametr do metody snapshot, coś takiego:. 'Quotes.getScene() migawki (snapshot);' – Eeliya

Odpowiedz

0

Czarna granicy pochodzi z bufora pikseli niezainicjowanych, wewnątrz obiektu BufferedImage. Domyślam się, że sama renderedImage nie zawiera właściwej części twojej sceny.

Podczas robienia zdjęcia scena może nie mieć jeszcze odpowiedniej wielkości. Spróbuj dać odpowiedni WritableImage do snapshot method:

snapshot = quotes.getScene().snapshot(new WritableImage(1500, 900));