PDA

View Full Version : سوال: مشکل در زوم کردن و چرخاندن عکس + اضافه کردن اسکرول به JPanel



golsa_6
دوشنبه 29 خرداد 1391, 19:37 عصر
با سلام،

من در چرخاندن و زوم کردن عکس ها مشکل دارم.

دارم برنامه ای می نویسم که یک سری عکس را در یک JPanel که داخل یک JFrame است، نشان میدهد.

در داخل کلاسی که از JPanel ارث برده، متد paintComponent را بازنویسی کرده ام که عکس مورد نظر من را با drawImage میکشد.

حالا در همین کلاس، من کد زیر را برای چرخاندن عکس مورد نظرم نوشتم، اما وقتی دکمه ی مربوطه را میزنم، به جای اینکه عکسم بچرخد، کل JPanel سیاه می شود!!

باید چکار کنم؟؟ احساس می کنم چون از repaint استفاده می کنم اینطور میشود، اما وقتی از g.drawImage استفاده کردم هیچ اتفاقی نیفتاد.

BufferedImage img;
try {
img = (BufferedImage)(ImageIO.read(new File(pic.get(ImageViewer.i))));
int w = img.getWidth();
int h = img.getHeight();
BufferedImage dimg = new BufferedImage(w, h, img.getType());
Graphics2D g = dimg.createGraphics();
g.rotate(Math.toRadians(10), w/2, h/2);
toDraw=dimg;
repaint();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

---------------------------------------------------------------------------------------------------

در ضمن در همین برنامه میخواهم اگر زوم کردم و عکسم در JPanel جا نمیشد، به JPanel اسکرول اضافه کند تا قسمتهای دیگر تصویر قابل مشاهده باشد.

آیا اصلا چنین کاری امکان پذیر است؟ چگونه و با چه دستوری؟

spiderman200700
دوشنبه 29 خرداد 1391, 22:35 عصر
باید قبل از رسم عکس از متد fillRect استفاده کنی و یه مربع با اندازه ی کل پنجره رسم کنی، بعدش عکستو رسم کنی.
اینطوری مشکل سیاه شدن صفحه بر طرف میشه.

در ضمن احتمالا موقع رسم عکس به جای رسم img داری dimg رو رسم میکنی. که اگه اینطوری باشه اشتباهه.

سعی کن مثل مثال زیر عمل کنی:
protected void paintComponent(Graphics g) {
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(Color.red);
g2d.fillRect(0, 0, getSize().width, getSize().height);
g2d.translate(170, 0);
g2d.rotate(1);
g2d.drawImage(new ImageIcon("f:\\image.jpg").getImage(), 0 , 0 , 200, 200, this);
}


برای زوم کردن عکس هم باید اول JPanel رو به یه JScrollBar اضافه کنی بعدش JScrollBar رو به JFrame اضافه کنی.
بعد هر دفعه که زوم میکنی اندازه ی JPanel رو به اندازه ی عکس بزرگ یا کوچیک شده تغییر بدی.