الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

كيف أغير دقة الصورة المرسومة بدون تغيير دقة شاشة النظام !

بدأه rohaili في 28 يناير 2010 · 12 رد · 1,411 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

عند رسم خط مثلا على لوحة panel بطول 70 بكسل pixel فإن طول هذا الخط سيكون 2 سنتيمتر ، إذا كانت دقة الشاشة 35 بكسل في السنتيمتر .

كيف أغير دقة الصورة المرسومة على اللوحة panel ، بدون تغيير دقة الشاشة في النظام ، بحيث استطيع إنشاء لوحة بطول محدد بالسنتيمترات ودقة محددة ؟

كما يحصل في بعض برامج الرسم حيث يمكن تحديد طول الصورة وكذلك دقتها .

300_130.gif

#2

ولماذا تحتاج مثل هذا الشيء؟

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#4

لإنشاء صور بدقة عالية لا تتأثر كثيرا بالتكبير والتصغير ؟

ماذا تقصد بالنسبة والتناسب ؟

300_130.gif

#5

للأسف مافهت بالضبط المقصد .

بس إن كنت تقصد تغير الأبعاد . يعني مثلا زينت لعبة أو برنامج على جهاز له ابعاد معينة.

وأريد أن أحافظ على جودة الرسومات حتى لوشغلناه على ابعاد أخرى (زي لعبة للكمبيوتر وأريد أن أشغله على جوال مع المحافظة على الجودة ) .

إذا كان هذا قصدك فاابحث عن الرسم بالمتجهات vectors .

#6

أريد رسم صورة بطول 9 سنتيمتر وعرض 5 سنتيمتر ودقتها 300 بكسل في البوصة .

300_130.gif

#7

ممممممم

لا علم لي

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

جزاك الله خيرا .

أريد صورة بامتداد jpg أو أي امتداد آخر يمكن لغالبية البرامج فتحه , وليس svg .

300_130.gif

#10

أنت الذي طلبت صور لا تتأثر بالتكبير :excl:

وصور الـ jpg والـ png وغيرها ... جميعها تتأثر بالتكبير لأنها bitmap

لكن لا تيأس :) فلا يأس مع الحياة ولا حياة مع اليأس :lol:

المكتبة التي أشرت إليها تمكنك من تصدير صورك بالنوع الذي تريد

أنصح أن تقوم بالاحتفاظ بالصورة الـ SVG لكي تتمكن من التصدير منها لاحقاً إلى ما تريد من لواحق مباشرة ومن دون تشوه الصورة

قم بتجاربك وأرنا الكود

#11

جزاك الله خيرا .

إذن لا يمكن إنشاء صور نقطية ( غير متجهه بدون svg ) بدقة غير دقة الشاشة .

300_130.gif

#12

أخي الكريم

أولاً:

تغيير دقة الشاشة لن يزيد من دقة صورك !!!

بل فقط يزيد "حجم" البكسل المعروض!!

أي إذا أنقصت دقة الشاشة إلى الربع، فسيظهر البكسل بأربع أضعاف حجمه.

أي خلاصة القول أنك لن تتوصل إلى "دقة أكبر" أو "صور لا تتأثر بالتكبير"

ثانياً:

لم أسمع بحياتي ببرنامج يغير دقة الشاشة لجزء منها (وهذا ما فهمت أنك تريده) بل يمكن تغيير دقة الشاشة كاملة.

ثالثاً:

أفضل حل هو أن تقوم باستخدام مكتبة batik مع رسوم SVG ثم تصدرها إلى اللاحقة التي تريد.

لكنك لا تريد ذلك ... ولك الحرية ! لانه بإمكانك القيام بذلك بتكبير الصورة مباشرة من Graphics2D كما في هذا المثال:

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class scale_example extends javax.swing.JFrame {

    JButton button = new JButton("double size");
    scalablePanel sp = new scalablePanel();

    public scale_example(String s) {
        JPanel jp = new JPanel();
        jp.setBackground(Color.red);
        getContentPane().setLayout(new BorderLayout());
        getContentPane().add(sp, BorderLayout.CENTER);
        getContentPane().add(button, BorderLayout.SOUTH);
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                sp.setHScaleFactor(sp.getHScaleFactor()*2);
                sp.setVScaleFactor(sp.getVScaleFactor()*2);
                sp.repaint();
            }
        });
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(600, 400);
        setTitle(s);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new scale_example("scale graphices").setVisible(true);
            }
        });
    }
}

import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JPanel;

public class scalablePanel extends JPanel {

    private double hScaleFactor = 1.0;
    private double vScaleFactor = 1.0;

    public scalablePanel() {
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        ((Graphics2D)g).scale(hScaleFactor, hScaleFactor);
        g.drawLine(0, 0, 100, 100);
        g.drawOval(0, 0, 100, 100);
    }

    public void setHScaleFactor(double d){
        hScaleFactor = d;
    }

    public double getHScaleFactor(){
        return hScaleFactor;
    }

    public void setVScaleFactor(double d){
        vScaleFactor = d;
    }

    public double getVScaleFactor(){
        return vScaleFactor;
    }
}
#13

جزاك الله خيرا .

300_130.gif

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…