ورود

View Full Version : مبتدی: مشکل با load تصویر در win32



yasoob
یک شنبه 18 تیر 1391, 20:53 عصر
با سلام و سپاس

دوستان ، من یک برنامه گرافیکی در win32 دارم. به این صورت که یک تابع در هر بار فراخوانی یک تصویر به فرمت bitmap می سازد و سپس آن را بر روی dialog pannel کاربر نمایش می دهد. این کار بطوری اتفاق می افتد که کاربر از آن تصور یک انیمیشن در تصویر را دارد.

زمانی که من برنامه را اجرا می کنم تا مدتی همه چیز خوب است اما به یکباره میزان حافظه commit charge شروع به افزایش می کند و برنامه پس از مدتی کاملا هنگ می کند.

بارها امتحان کردم . بدون بارگذاری تصویر بر روی دیالوگ باکس هیج مشکلی در اجرای برنامه پیش نمی یاد. اما با وجودی که من از روتین های متداول بارگذاری تصویر استفاده می کنم ، همیشه بعد از مدت زمانی این مشکل پیش می یاد.

لطفا راهنمایی ام کنید.

mohamad.zakery
یک شنبه 25 تیر 1391, 01:57 صبح
مشکل بسیار ساده حل میشه!!!

همیشه در گرافیک و پردازش تصویر، زمانی مشخص یا به عبارت بهتر جاهای خاص دستورات پردازشی اجرا میگردن!!!

مثلا شما فقط در اولین اجرا و بار کردن اطلاعات به حافظه، فقط تخصیص حافظه میدین!!!

اگر قرار باشه مثلا دستوارت پردازشی رو داخل یک لوپ اجرا کنین و هر بار، تخصیص حافظه بدین مشکل هنگ یا کرش برنامه 100% پیش میاد!!!


دقت کنین تخصیص حافظه تو برنامتون درست انجام میشه!!!
حافظه اضافی ایجاد نمیشه!!!
چک کنن حافظه های کمکی رلیز یا همون رها شدن یا نه!!!!

مطمئن باشین که سخت افزار و ماشین اشتباه نمی کن؛ این ما هستیم که اشتباه میکنیم!!!

فکر کنم با یک بررسی ساده این مشکل حل میشه!!!

mohamad.zakery
یک شنبه 25 تیر 1391, 01:58 صبح
اون تابع چند بار فراخوانی میشه؟

yasoob
پنج شنبه 12 مرداد 1391, 22:43 عصر
با سلام
ممنون از پاسخ شما.
تابع من بر اساس زمانی که برای تایمر برنامه در نظر گرفته می شه در کم ترین حالت هر 100 میلی ثانیه فراخوانی میشه. مشکل دقیقا زمان بارگزاری یک تصویر bitmap ساخته شده به ازای مقدار جدید تایمر بر روی صفحه کنترل پنل است. من سعی می کنم از Getdc و ReleaseDc استفاده کنم. در هر بار فراخوانی ناگزیر از استفاده از این دو تابع هستم اما بطور مشخص بعد از یک بازه زمانی کوتاه یا بیشتر حافظه سیستم پر می شود. من تمام متغیر ها رو آزاد می کنم. کلیه بردار ها و ارایه ها را با پوینتر تعریف کردم و هر بار ازادشون می کنم. بنظر مشکلی در هنگام اجرای روتین برنامه وجود نداره و عمده مشکل مربوط به بارگذاری تصویر بر روی صفحه است.
کد های زیادی را امتحان کردم اما هیج کدام جوابگو نیستند. تنها یک راه جواب می دهد و آن مناسب کار من نیست که استفاده از ریسورس و بارگذاری یک تصویر ریسور شده بر روی صفحه است.
من کد خودم را با کدی عوض کردم که از کلاس CImg استفاده می کند. مشکل به کلی بر طرف شد اما یک مشکل دیگر وجود دارد و ان این است که صفحات تولید شده توسط این کلاس در اختیار کاربر نیست و نمی توان ان را بر روی مکان مورد نظر در کنترل پنل ثابت کرد.

امیدوارم توضیحات ام بیش از حد گنگ و گیچ کننده نباشد اما من هم موافقم که اگر مشکلی هست از برنامه من است نه از سخت افزار ویندوز و من دنبال علت این مشکل هستم

باز هم از توجه شما ممنون