簡體   English   中英

擺動問題:在pdf圖像上繪制矩形,並在放大和縮小時保持其大小和位置一致

[英]Swing issue: drawing rectangles over the pdf image and keep their size and positions consistent when zooming in and out

關於Swing,我有一個相當緊迫的問題,我已經好多年沒碰到了。

我有一個代碼,允許用戶在pdf文檔(包含在JPanel )上繪制不同的矩形。 我繪制它們,移動它們,調整它們的大小,選擇它們,甚至在它們上寫文字。 我無法做的是在縮放文檔時保持一致。 當文檔變大時,我繪制的矩形將保持在相同的位置和相同的大小。

我想知道是否有相對簡單的邏輯來跟蹤縮放級別,最重要的是相應地更新矩形。 我可以檢索縮放因子,它是一個浮點數,但是不幸的是,我正在使用Rectangle對象,該對象對xyheightwidth使用int 將其轉換為Rectangle.Float會很麻煩,我想將其保存以備不時之需。

我嘗試使用AffineTransform ,但由於某種原因,我對y坐標錯誤,因此我不太熟悉。 誰能向我解釋:

  1. 隨着pdf文檔的放大和縮小,控制Rectangle對象的最佳方法是什么?
  2. 如果AffineTransform是最好的方法,我應該如何處理(如果有的話,可以提供一個很好的解釋的鏈接-如果找不到,我找不到它)?

這是我一直在努力的唯一問題,現在變得有些沮喪。

使用AffineTransform進行縮放:

  1. 獲取Graphics對象G的變換T
  2. 創建一個AffineTransform對象A
  3. 設置A的小數位數
  4. G的變換設置為A
  5. 繪制形狀
  6. G的變換設置回T

轉換為代碼-假設scale是要按以下方式scale的值:

@Override
protected void paintComponent(Graphics gr){
    super.paintComponent(gr);
    Graphics2D g = (Graphics2D)gr;
    AffineTransform prevTransform = g.getTransform();
    AffineTransform at = new AffineTransform(prevTransform);
    at.scale(scale, scale); 
    g.setTransform(at);
    g.drawRect(...);
    g.setTransform(prevTransform); 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM