Я получаю изображение динамически из веб-сервиса. Впоследствии я должен использовать его в качестве фона для верхней половины экрана. Моя проблема в том, что я получаю только один размер изображения (что должно быть примерно одинаково для многих телефонов смартфонов), но когда я изменяю его размер, чтобы заполнить половину экрана, он становится неровным. Я попытался поместить его в качестве фона контейнера (добавив отступы в ожидаемый размер) и используя BACKGROUND_IMAGE_SCALED_FILL и/или используя методы изображения scaledHeight/scaledWidth, заполнить и масштабировать. Не имеет значения, если я масштабирую его до большего или меньшего размера, он все равно заметно ухудшается.CodeName One - изображение получает пиксели при масштабировании
Этого можно ожидать? Есть ли другой способ масштабирования изображений?
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;
}
}
Если я не возвращает изображение, но контейнер, имеющий в качестве фона я хотел бы добавить его в контейнер, как это:
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
Оригинал снимка (пожалуйста, игнорировать темный бар над ним, он был добавлен в последнее время, и я не сохранил предыдущую версию, так как я сказал, что она идет динамически): http://i68.tinypic.com/16lmeqr.jpg
Scaled: http://i68.tinypic.com/w7zafm.jpg
Обрезанные: http://i65.tinypic.com/2nkp79l.png
изображение, как последнее обновление: http://i68.tinypic.com/2ik7eiq.png
Масштабирование ухудшит качество изображения. Это данность. Если вы предоставите код, фактический файл изображения и скриншоты, я смогу помочь больше. –
Добавлена запрашиваемая информация. (Прошу прощения, если это вызывает всплывающее двойное уведомление, я не уверен, как работает SO) –