2012-09-21 33 views
6

Ngay bây giờ tôi đang grabbing GraphicsContext cho nút canvas của tôi và cố gắng mộtLàm thế nào để bạn phóng to trên một nút JavaFX 2 Canvas?

gc.scale(2, 2); 

On canvas của tôi, tôi có một vài chục phương pháp có sẵn. Vì vậy, tôi biết phải có một cái gì đó để phóng to. Tuy nhiên, nỗ lực của tôi không tạo ra "phát triển" hoặc "phóng to" rõ ràng. Có điều gì tôi cần phải gọi để làm điều này được áp dụng hoặc vẽ lại không?

Trả lời

5

Tôi nghĩ rằng gc.scale(2,2) sẽ chia tỷ lệ những thứ tiếp theo bạn vẽ trên canvas theo hệ số 2, không phải thứ bạn đã vẽ.

Nếu bạn muốn mở rộng canvas, bạn có thể đặt biến đổi trên canvas, chứ không phải bối cảnh đồ họa.

canvas.setScaleX(2); 
canvas.setScaleY(2); 

Nếu bạn muốn bức tranh thu nhỏ lại được phản ánh trong tính toán bố trí cho cán bộ quản lý bố trí sau đó bạn có thể bọc nó trong một Group và nếu bạn muốn phóng to giống như hiệu ứng trên vải quy mô mà các bộ phận của vải được cắt bớt , sau đó bạn có thể đặt canvas trong một ScrollPane và xác định một khung nhìn cho nó hoặc thiết lập một clip trên nút canvas.

Update để thảo luận pixellation hành

Để tránh các vấn đề pixellation về độ phóng đại, tôi nghĩ rằng bạn sẽ cần phải lưu giữ hồ sơ của tất cả các lệnh đồ họa đã được rút ra cho đến nay, sau đó khi bạn muốn thay đổi hệ số thu phóng, xóa canvas, áp dụng tỷ lệ mới cho canvas, sau đó phát lại tất cả các lệnh đồ họa. Có lẽ một số định dạng như svg có thể được sử dụng để ghi lại các lệnh đồ họa.

Hoặc bạn chỉ có thể sử dụng biểu đồ cảnh và vẽ lên biểu đồ đó thay vì canvas, sau đó bạn cũng sẽ không có vấn đề về pixellation.

Tôi nghĩ rằng điều quan trọng cần lưu ý ở đây là vải được cho là một loại chế độ lửa ngay lập tức và quên điều, chứ không phải là một dịch vụ vẽ chế độ giữ lại như đồ thị cảnh.

+0

có, tính năng này hoạt động. Sorta. Nó pixelates tất cả mọi thứ khá xấu. Kể từ khi dòng chỉ là vectơ tôi đang tự hỏi nếu có một cách để "vẽ lại" tất cả mọi thứ trong độ phóng đại mà bạn thiết lập? Tôi biết tôi đã có thể làm điều này khi tôi chỉ sử dụng một đối tượng nhóm đơn giản so với canvas. Nó trông như thế này: riêng void reDrawPreview() { cho (Node n: canvsGroup.getChildren()) { Dòng thứ hai = (Dòng) n; nd.setStrokeWidth (Draw2d.getStrokeWeight()); } – ril3y

+0

xin lỗi về định dạng .. không chắc chắn cách định dạng mã trong nhận xét? – ril3y

+0

Bạn có thể xem cách hoạt động tại 3:36 trong video này. http://www.youtube.com/watch?v=kdJZbVO4E4Q&feature=g-upl – ril3y

Các vấn đề liên quan