ضغط البيانات في Qt

مكتبة كيوتي 2 عدد التعليقات |كتب المقالة: العبدلي|اطبع المقالة اطبع المقالة |عدد المشاهدات : 1,829|
إذا ما أردت أن تقلل من استهلاكك للذاكرة أو إذا أردت أن تنقل ملف عبر الشبكة بشكل أسرع فإن Qt توفر لك إمكانية ضغط البيانات (byte array) ثم فك ضغطها , وتستعين Qt في ذلك بـمكتبة zlib .هذه العملية لا ينتج عنها ملف أرشيف zip يمكن فتحه ببرامج أخرى , بل هي فقط لضغط البيانات داخل البرنامج وتخزن في الذاكرة .تستخدم الدالة qCompress لضغط البيانات (byte array) وتستخدم الدالة qUncompress لفك ضغط البيانات (byte array) وتكون البيانات اما على شكل *uchar او على شكل QByteArray , وللضغط مستويات من 0 الى 9 كلما زادت القيمة قلت كمية البيانات بعد الضغط .
مثال ضغط بيانات لصورة ثم فك الضغط :
1
2
3
4
5
6
7
8
9
10
11
12
13
QImage image("c:/try/c3.jpg");
qDebug()<<image.byteCount();//44892
QByteArray compressed_arr=qCompress(image.bits(),image.byteCount(),9);//ضغط البيانات
/*
    الوسيط الأول لبيانات الصورة وهي على شكل
    uchar*
    الوسيط الثاني لكمية هذه البيانات ,والثالث لمستوى الضغط (9) وهو الاعلى
*/
qDebug()<<compressed_arr.count();//33237
QByteArray uncompressed_arr= qUncompress(compressed_arr);//فك الضغط
qDebug()<<uncompressed_arr.count();//44892
QImage image2;
image2.loadFromData(uncompressed_arr);//انقل البيانات مفكوكة الضغط الى الصورة الجديدة

لاحظ أنه بعد عملية الضغط تقلص حجم بيانات الصورة من 44892 إلى 33237 , الآن عرفنا كم هي مفيدة هذه التقنية …

openCV و Qt

برمجة رسوميات 3 عدد التعليقات |كتب المقالة: العبدلي|اطبع المقالة اطبع المقالة |عدد المشاهدات : 2,409|
مقدمة
openCV مكتبة متخصصة في “computer vision” وتتميز بأنها مفتوحة المصدر وتعمل على أنظمة linux و windows و mac ولقد تم كتابتها بلغة c/c++ وتدعم أيضا لغات أخرى python و rubi و matlab.
وتركز المكتبة على تطبيقات ال real time ,ويميزها سهولتها وإمكانية كتابة برامج كاملة عن طريقها وفي وقت قصير .وتتوفر للمكتبة أكثر من خمسمائة دالة تغطي مساحات عديدة للرؤية

تشمل فحص المنتج والتصوير الطبي والأمن وواجهة المستخدم ومعايرة الكاميرا والروبوتات…الخ.

ما هو الـ “computer vision” ؟

علم برمجي يهتم بطرق تحويل بيانات الصور والفيديو إلى معلومات وقرارات أو إعادة تمثيل هذه البيانات من جديد . وتكون المعلومات والقرارات على النحو التالي : “هل يوجد شخص في الصورة” أو “هل البصمات متطابقة في الصورتين”…الخ.أما إعادة تمثيل البيانات فتكون على النحو التالي: “تحويل الصورة الملونة إلى صورة رمادية” أو “إزالة حركة الكاميرا من الفيديو” …الخ. » للمزيد

QtMultimedia-audio

مكتبة كيوتي 2 عدد التعليقات |كتب المقالة: العبدلي|اطبع المقالة اطبع المقالة |عدد المشاهدات : 2,013|
مقدمة
تم توفير هذه الوحدة في الإصدار 4.6 من مكتبة Qt . يعرفها Qt Assistant بأنها وحدة توفر دوال منخفضة المستوى للتعامل مع تعدد الوسائط. وتنقسم إلى قسمين Audio و video .
هي ليست الوحدة الوحيدة للتعامل مع تعدد الوسائط فقبلها الوحدة phonon وهي تحوي دوال عالية المستوى ,ولكن ما يميز هذه الوحدة حقا هو أنها تمكنك من التعامل مع عتاد لم يكن بوسعك التعامل معها في phonon والأكثر جمالا

أن QtMultimedia سوف تصبح الوحدة الأولى للتعامل مع ال multimedia في مكتبة Qt4.7 وذلك بتوفير دوال ذات مستوى عالي وأخرى منخفضة المستوى جنبا إلى جنب في الوحدة.

[odio , video ]

QtMultimedia-audio :
بالإضافة إلى فضاء الأسماء (QAudio) المتوفر بها معظم الثوابت الرقمية تمثل QtMultimedia-audio فئتين رئيسيتين QAudioInput (إدخال) و QAudioOutput(إخراج) , وأيضا تتوفر الفئة QAudioFormat للتحديد صيغ البيانات الصوتية لكلا من QAudioInput و QAudioOutput , وآخر فئة هي QAudioDeviceInfo للاستعلام عن عتاد الصوت .عموما قبل الغوص في QtMultimedia-audio دعنا نفهم طريقة تمثيل بيانات الصوت في الكمبيوتر . » للمزيد

QtScript الجزء الثالث:مواضيع متقدمة

مكتبة كيوتي لا تعليقات |كتب المقالة: العبدلي|اطبع المقالة اطبع المقالة |عدد المشاهدات : 1,759|
QtScript الجزء الأول : مقدمة + معالجة الأنواع الرئيسية والحاويات
QtScript الجزء الثاني: تغليف الكائنات التي ترث من QObject
التغليف الضمني لفئات وكائنات سي++ داخل بيئة اللغة النصية
لقد كنا في الدروس السابقة نقوم بتغليف كائنات سي++ يدويا بمعنى باستخدام مجموعة تعليمات كنا نقوم بتحويل كائن سي++ إلى QScriptValue ثم نرسلها إلى بيئة اللغة النصية بإعطائها اسم مناسب .

وهذه الطريقة لا تصلح في حال كان هناك دالة تابعة لكائن (أو مستقلة)في اللغة النصية تعيد كائن من النوع A في الحقيقة لن تستطيع بيئة اللغة النصية التعرف على هذا الكائن(class) المعاد من الدالة الذي هو من النوع A لأنه مازال نوع سي++ لم نقم بتغليفه .
مثال عن الخطأ

1
qDebug()< <engine.evaluate("w.getPoint();").toString();//TypeError: cannot call getPoint(): unknown return type `A' (register the type with qScriptRegisterMetaType())

من قراءتك للمشكلة لعلك عرفت ماهو الحل !!
وفرت Qt الدالة qScriptRegisterMetaType لتقوم بحل هذا الجزء من المشكلة بعد عدة خطوات. » للمزيد

WP Theme & Icons by N.Design Studio | تعريب قياسي
التدويناتRSS | التعليقاتRSS | تسجيل الدخول