سؤال

أحتاج إلى عرض الصور المصغرة من الصور في دليل معين.يمكنني استخدام TFileStream قراءة ملف الصورة قبل تحميل صورة إلى عنصر صورة.الصورة النقطية ثم تغيير حجمها إلى حجم الصورة المصغرة ، و تعيين TImage مكون على TScrollBox.

يبدو أن عمل طيب ، ولكن يبطئ الكثير جدا مع الصور الكبيرة.

هل هناك طريقة أسرع من التحميل (صورة) الملفات من القرص و تغيير حجم عليها ؟

شكرا يا بيتر

هل كانت مفيدة؟

المحلول

وليس حقا. ما يمكنك القيام به هو حجمها في موضوع الخلفية، واستخدام "مكان حامل" صورة حتى يتم تغيير الحجم. وأود أن ثم حفظ هذه الصور حجمها إلى نوع من ملف ذاكرة التخزين المؤقت لاحق معالجة (النوافذ يفعل هذا، وتدعو thumbs.db مخبأ في الدليل الحالي).

لديك العديد من الخيارات على بنية موضوع نفسه. خيط واحد أن يفعل كل الصور، أو تجمع مؤشرات ترابط فيها موضوع يعرف فقط كيفية معالجة صورة واحدة. و AsyncCalls المكتبة حتى وسيلة أخرى، ويمكن أن تبقي الأمور بسيطة إلى حد ما.

نصائح أخرى

سوف تكمل الإجابة من قبل skamradt مع محاولة تصميم هذا لكونه أسرع وقت ممكن.لهذا يجب أن

  • تحسين I/O
  • استخدام مؤشرات ترابط متعددة لجعل استخدام وحدة المعالجة المركزية متعددة النوى ، و للحفاظ على حتى واحد وحدة المعالجة المركزية الأساسية العامل حين تقرأ (أو كتابة) الملفات

استخدام مؤشرات ترابط متعددة يعني أن استخدام VCL فصول تغيير حجم لن ينجح ، VCL ليس مؤشر الترابط-الآمن ، وجميع الخارقة حول أن لا مقياس جيد. المجموعة المالية مختبر الحاسوب روابط لمعالجة الصور رمز.

من المهم أن لا يسبب عدة متزامنة عمليات الإدخال/الإخراج عند استخدام مؤشرات ترابط متعددة.إذا اخترت أن أكتب الصور المصغرة إلى الملفات ، ثم مرة واحدة كنت قد بدأت قراءة الملف يجب عليك قراءة ذلك تماما و مرة واحدة كنت قد بدأت كتابة الملف يجب عليك أيضا الكتابة تماما.التداخل سواء في عمليات قتل I/O, لأنك أن يسبب الكثير من يسعى عمليات القرص الصلب الرأس.

للحصول على أفضل النتائج القراءة (والكتابة) من الملفات أيضا يجب أن لا يحدث في الرئيسية (واجهة المستخدم الرسومية) موضوع من التطبيق الخاص بك.التي من شأنها أن تشير إلى التصميم التالية:

  • يكون موضوع واحد قراءة الملفات في TGraphic الكائنات ، ووضع هذه في مؤشر الترابط-الآمن قائمة.
  • يكون بركة موضوع الانتظار على قائمة الملفات في الحجم الأصلي ، ويكون موضوع واحد عملية واحدة TGraphic كائن حجمه إلى آخر TGraphic كائن ، هذا إضافة إلى موضوع آخر-قائمة آمنة.
  • بإخطار المستخدم الرسومية الموضوع لكل صورة مصغرة تضاف إلى القائمة ، بحيث يمكن عرضها.
  • إذا الصور المصغرة هي أن تكون مكتوبة إلى ملف ، هل هذا في قراءة الموضوع وكذلك (انظر أعلاه تفسيرا).

تحرير:

على إعادة قراءة السؤال الخاص بك لاحظت أنك ربما تحتاج فقط إلى تغيير حجم صورة واحدة ، وفي حالة واحدة على خلفية الموضوع هو بالطبع بما فيه الكفاية.سأترك الإجابة في المكان على أي حال, ربما سيكون من استخدام شخص آخر لبعض الوقت.هذا ما تعلمته من أحد أحدث المشاريع ، حيث البرنامج النهائي يمكن أن يكون في حاجة إلى المزيد من السرعة ولكن فقط باستخدام حوالي 75% من رباعية النوى آلة في أوقات الذروة.فصل I/O من تجهيز من شأنها أن تجعل الفرق.

وأنا غالبا ما تستخدم TJPEGImage مع مقياس: = jsEighth (في دلفي 7). هذا هو سريع حقا لأن JPEG دي ضغط يمكن تخطي الكثير من البيانات لملء نقطية فقط الثامن من العرض والارتفاع.

وثمة خيار آخر هو استخدام أسلوب قذيفة لاستخراج صورة مصغرة ، وهي جميلة أسرع وقت كذلك

أنا في رؤية الأعمال ، أنا ببساطة تحميل الصور إلى GPU باستخدام OpenGL.(عادة 20x 2048x2000x8bpp في الثانية), bmp في الملمس ، والسماح videocard مقياس (win32, مايك Lischke هو opengl رؤوس)

تحميل هذه الصورة التكاليف 5-10ms اعتمادا على الدقيق videocard (إن لم يكن المتكاملة و nvidia 7300 أو أحدث.الأخيرة جدا المتكاملة وحدات معالجة الرسومات قد تكون قابلة للتنفيذ أيضا).وتوسيع نطاق عرض التكاليف 300us.وهو ما يعني يمكن للعملاء والتكبير مثل مجنون دون لمس التطبيق.لقد رسم تراكب (التي كانت tmetafile ولكن الآن تنسيق) على أعلى من ذلك.

أكبر صورة 4096x7000x8bpp مما يدل والمقاييس في إطار 30ms.(GF 8600)

الحد من هذه التكنولوجيا هو ماكس نسيج الحجم.ويمكن حلها عن طريق تجزئة الصورة إلى عدة القوام ، ولكن لم يكلفوا أنفسهم حتى الآن لأنني تسليم أنظمة البرمجيات.

(بعض أحجام نموذجية:nv6x00 سلسلة:2k*2k ولكن التحميل فقط عن كسر حتى بالمقارنة مع GDI nv7x00 سلسلة:4k*4k بالنسبة لي خط الأساس بطاقات.GF7300 مثل $20-40 nv8x00 سلسلة:8k*8k )

لاحظ أن هذا قد لا يكون للجميع.ولكن إذا كنت في الحظ الحالة إلى تحديد الأجهزة حدود ، فإنه قد عمل.المشكلة الرئيسية هي أجهزة الكمبيوتر المحمولة مثل Thinkpads ، وحدات معالجة الرسومات التي هي أقدم من avg الكمبيوتر المحمول ، والتي هي بدورها في كثير من الأحيان جيل وراء أجهزة الكمبيوتر المكتبية.

اخترت OpenGL على دايركت لأنه أكثر ساكنة في وقت وأسهل للعثور على غير لعبة الأمثلة.

وحاول أن ننظر إلى Graphics32 مكتبة : انها جيدة جدا في الأمور الرسم والأعمال <م > كبيرة مع الصور النقطية. هم الموضوع - الآمن مع مثال جيد، وانها خالية تماما

.

واستغلال النوافذ القدرة على خلق الصور المصغرة. تذكر أن ملفات Thumbs.db المخفية في المجلدات التي تحتوي على صور؟

ولقد نفذت ما يشبه هذه الميزة ولكن في VB. برنامجي هو قادرة على بناء الصور المصغرة من 100 صورة (حجم مختلطة) في حوالي 10 ثانية.

وأنا لست قادرا على تحويله إلى دلفي بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top