2015-05-03 2 views
1

Я использую Primefaces p: graphicImage для отображения изображения всех зарегистрированных пользователей. Все работает почти отлично, за исключением того, что мои фотографии выглядят как негативы. Что я могу делать неправильно. Вот мой код:Отображение изображения Использование p: graphicImage. Картинки выглядят как негативы

<sec:authorize access="isAuthenticated()"> 
    <span> 
    <p:graphicImage value="#{currentUser.image}" class="img-thumbnail pull-right" 
     height="80px;" width="80px;" > 
     <f:param name="id" value="#{request.remoteUser}" /> 
    </p:graphicImage> 
    </span> 

..... 

And here is the JSF Managed Bean 


@Named(value = "currentUser") 
@ApplicationScoped 
public class CurrentUser implements Serializable { 

    @EJB 
    private VempDetailsFacade vempDetailsFacade; 
    private VempDetails details; 

    public StreamedContent getImage() throws IOException { 
     FacesContext context = FacesContext.getCurrentInstance(); 

     if (context.getCurrentPhaseId() == PhaseId.RENDER_RESPONSE) { 
      // So, we're rendering the HTML. Return a stub StreamedContent so that it will generate right URL. 
      return new DefaultStreamedContent(); 
     } else { 
      // So, browser is requesting the image. Return a real StreamedContent with the image bytes. 
      String imageId = context.getExternalContext().getRequestParameterMap().get("id"); 
      details = vempDetailsFacade.find(imageId); 
      if (details != null) { 
       try { 
        return new DefaultStreamedContent(new ByteArrayInputStream(details.getEmpImage())); 
       } catch (Exception e) { 
        System.err.println("No Image Retrieved : "+e.getMessage()); 
       } 
      } 
      return null; 

     } 
    } 

    public VempDetails getDetails() { 
     return details; 
    } 

    public void setDetails(VempDetails details) { 
     this.details = details; 
    } 

    @PostConstruct 
    public void init() { 
     details = vempDetailsFacade. 
       find(FacesContext.getCurrentInstance().getExternalContext().getRemoteUser()); 
    } 

} 

Что я могу делать неправильно. Одни и те же фотографии, отображаемые в обычном дисплее свинга приложения без каких-либо проблем

Update На Кодексе

@BalusC Вот это быстрый код теста, который отображает изображение на качелях.

public DisplayImage() { 
     super("Image Display"); 
     setSize(600, 600); 
     connection = getConnection(); 
     try { 
      statement = connection 
        .prepareStatement("SELECT empImage FROM v_empDetails WHERE empCode=?"); 
      statement.setString(1, "009"); 
      result = statement.executeQuery(); 

      byte[] image = null; 
      //just a result anyway 
      while (result.next()) { 
       image = result.getBytes(1);   
      } 
      Image img = Toolkit.getDefaultToolkit().createImage(image); 
      ImageIcon icon = new ImageIcon(img); 
      JLabel lPhoto = new JLabel(); 
      lPhoto.setIcon(icon); 
      add(lPhoto); 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     setVisible(true); 
    } 

    public Connection getConnection() { 
     Connection connection = null; 
........ 

Может быть, что Toolkit.getDefaultToolkit() createImage (изображение). линия делает re-invert. Изображения заполнялись с использованием другого приложения, и это скорее обновление, чтобы иметь его как веб-приложение.

Спасибо за ваш совет заранее.

ответ

2

JSF/PrimeFaces является только ведущим и не инвертирует изображения вообще. В противном случае любой другой человек в мире, использующий JSF/PrimeFaces, столкнулся бы с такой же проблемой. Ваша проблема кроется глубже. Скорее всего, изображения уже хранятся как негативы в БД и что ваш существующий код Swing/Java2D написан таким образом, что он повторно инвертирует изображения перед отображением, возможно, во время плохо написанного процесса изменения размера/обрезки.

Итак, чтобы устранить эту проблему, переориентируйте код, ответственный за сохранение этих изображений в БД (и не забудьте исправить код Swing/Java2D, чтобы больше не инвертировать их).

+0

благодарит брата за указатель, воссоздал фотографию, сохранив те, которые были повторно перевернуты локально, очищая сохраненную в базе данных и повторно загружая изображения. Дисплей теперь работает как шарм .... ;-) –