كيو تي الحركة (الخطي) طمس
-
12-12-2019 - |
سؤال
هل هناك حل بسيط لإضافة الضبابية إلى صورة في كيو تي?لم يتم العثور على أي برنامج تعليمي جيد حول طمس.أحتاج إلى شيء بسيط حقا ، يمكنني فهمه ، وسأكون جيدا حقا إذا كان بإمكاني تغيير زوايا التمويه.
المحلول
كيو تي ليس لديه مرشح ضبابية الحركة.نظرت إلى رمز QGraphicsBlurEffect
;يستخدم QPixmapBlurEffect
الذي يستخدم نفسه طريقة مساعد داخلي تسمى expblur
(طمس الأسي).
expblur
نفسها تستخدم تأثير طمس أحادي البعد (ضبابية الحركة في الاتجاه العاشر ، الطريقة qt_blurrow
) مرتين.يقوم بتدوير الصورة بين الطمس بمقدار 90 درجة ثم يقوم بتدويرها مرة أخرى.
لذلك في الواقع ، كيو تي لديها تأثير ضبابية الحركة ولكن هذا داخلي فقط.لذلك تحتاج إلى كتابة التأثير الخاص بك.للقيام بذلك ، إلقاء نظرة على رمز qt_blurrrow
, ، والتي يمكنك العثور عليها في مصادر كيو تي في src/gui/qpixmapfilter.cpp
.هذا وسوف تعطيك نوعية جيدة للمرشح ، لأنه هو مرشح طمس الأسي بدلا من واحد خطي.
إذا كنت لا تريد أن تذهب عميقا في شفرة المصدر كيو تي ، واتخاذ هذا الرمز الزائف كبداية:
foreach pixel (x, y) in image {
for dx = -r to r with x+dx within image {
for dy = -r to r with y+dy within image {
Add pixel (x+dx, y+dy) of the source image with ↩
factor (matrix[dx, dy]) to the target image.
}
}
}
حيث يمكن تعريف المصفوفة على هذا النحو (لطمس الحركة الأفقية مع نصف القطر 2):
0 0 0 0 0
0 0 0 0 0
0.1 0.2 0.4 0.2 0.1
0 0 0 0 0
0 0 0 0 0
لاحظ أن مجموع كل الإدخالات يجب أن يكون 1 ، أو عليك تقسيم الألوان على مجموع إدخالات المصفوفة.
بناء هذه المصفوفة لنصف قطر معين ص وزاوية-أمر صعب عندما تريد السماح بزوايا عشوائية لـ - (ليس فقط 90 درجة خطوات).[تحرير:انظر التعليق 3 للحصول على جيل سهل من هذه المصفوفة.]