Ich erhalte ein Bild dynamisch von einem Webservice. Danach sollte ich es als Hintergrund für die obere Hälfte des Bildschirms verwenden. Mein Problem ist, dass ich nur eine Größe des Bildes bekomme (was für viele Smartphone-Smartphones ungefähr richtig sein sollte), aber wenn ich die Größe so ändere, dass sie die Hälfte des Bildschirms ausfüllt, wird sie verpixelt. Ich habe versucht, es als Hintergrund eines Containers (Hinzufügen von Auffüllen zu der erwarteten Größe) und mit BACKGROUND_IMAGE_SCALED_FILL und/oder mit Image-Methoden skaliertHeight/skalierte Breite, füllen und skalieren. Es spielt keine Rolle, wenn ich es zu einer größeren oder kleineren Größe skaliere es verschlechtert sich immer noch merklich.CodeName Eins - Bild wird beim Skalieren pixeliert
Ist das zu erwarten? Gibt es eine andere Möglichkeit, Bilder zu skalieren?
public class CopyOfVistaPantallaPrincipal extends VistaDisparaEventos {
private Container canvasPantallaPrincipal;
public CopyOfVistaPantallaPrincipal() {
canvasPantallaPrincipal = new Container();
canvasPantallaPrincipal.setName("canvasPantallaPrincipal");
super.canvas = this.canvasPantallaPrincipal;
initPantallaPrincipal();
}
private void initPantallaPrincipal() {
canvasPantallaPrincipal.setLayout(new LayeredLayout());
canvasPantallaPrincipal.getUnselectedStyle().setBgTransparency(0);
ModeloNovedades modelo = new ModeloNovedades();
Image imgPrincipal = createImagenPrincipal(modelo);
canvasPantallaPrincipal.setName("canvas pantalla principal");
Container otro = new Container(new BorderLayout());
if (imgPrincipal != null) {
img.getUnselectedStyle().setBorder(null);
img.getUnselectedStyle().setPadding(0, 0, 0, 0);
img.getUnselectedStyle().setMargin(0, 0, 0, 0);
canvasPantallaPrincipal.addComponent(img);
}
canvasPantallaPrincipal.addComponent(otro);
}
private Container createImagenPrincipal(ModeloNovedades modelo) {
return loadTopImage(modelo, modelo.getDestacado());
}
private Container loadTopImage(ModeloNovedades modelo, Hashtable destacado) {
int width = Display.getInstance().getDisplayWidth();
int imgHeight = (int) ((Display.getInstance().getDisplayHeight()/2) * 0.95) ;
//Default image
Image foregroundImage = FormFactory.loadImage("/imagenPrincipaLogoOld.png");
if (! modelo.getDestacado().isEmpty()){
String destacadaURL = "" + destacado.get("imagen");
if (! destacadaURL.equals("")){
//After updating it loads the downloaded image here
byte[] data = (byte[]) DataCenter.getInstance().get(destacadaURL, false);
foregroundImage = FormFactory.loadImage(data, 100);
}
}
imageContainer.getAllStyles().setPadding(imgHeight/2, imgHeight/2, width/2, width()/2);
imageContainer.getAllStyles().setBgImage(foregroundImage);
imageContainer.getAllStyles().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED_FILL);
return imageContainer;
}
}
Wenn ich nicht das Bild zurückkehrt, sondern ein Behälter, den er als Hintergrund mit würde ich es zu einem Container wie folgt hinzu:
imageContainer.getAllStyles().setPadding(imgHeight/2, imgHeight/2, width/2, width/2);
imageContainer.getAllStyles().setBgImage(foregroundImage);
imageContainer.getAllStyles().setBackgroundType(Style.BACKGROUND_IMAGE_SCALED); //only if it was scaled
Originalbild (ignorieren Sie bitte die dunkler Balken drüber, es wurde kürzlich hinzugefügt und ich habe die vorherige Version nicht gespeichert, wie ich sagte, es kommt dynamisch): http://i68.tinypic.com/16lmeqr.jpg
Scaled: http://i68.tinypic.com/w7zafm.jpg
Geerntetes: http://i65.tinypic.com/2nkp79l.png
Bild als der letzten Aktualisierung: http://i68.tinypic.com/2ik7eiq.png
Skalierung verschlechtert die Bildqualität. Das ist selbstverständlich. Wenn Sie Code, die tatsächliche Bilddatei und Screenshots bereitstellen, kann ich Ihnen mehr helfen. –
Die angeforderten Informationen hinzugefügt. (Es tut mir leid, wenn dies dazu führt, dass eine doppelte Benachrichtigung erscheint, ich bin mir nicht sicher, wie SO funktioniert) –