نمایش نتایج 1 تا 12 از 12

نام تاپیک: خطای GDI هنگام ذخیره فایل

  1. #1

    خطای GDI هنگام ذخیره فایل

    سلام یه دایرکتوری دارم که داخلش 100 تا فولدر هست و داخل هر فولدر یه عکس!!! حالا من میخوام اون عکسها رو یکی یکی داخل یه پیکچر باکس بندازم و بعد هم ذخیره کنم!!!! این کار اگر مثلا هزار تا عکس باشه زمان بر هست!!!! میخوام برنامه به صورت خودکار این عکسها رو یکی یکی بگیره و بندازه داخل پیکچر باکس و یه سری ویرایش روش انجام بده و بعد هم ذخیره کنه البته این کار رو اگر خودم به صورت دستی انجام بدم خطایی رخ نمیده اما وقتی میخوام به صورت خودکار این کار انجام بشه این پیغام رو میده
    Additional information: A generic error occurred in GDI+.


    این هم کد ذخیره فایل
                
    if (pictureBox1.Image != null)
    {

    Bitmap bmp1 = new Bitmap(panel1.Width, panel1.Height);

    panel1.DrawToBitmap(bmp1, new Rectangle(0, 0, panel1.Width, panel1.Height));
    bmp1.Save(@"C:\Users\hiradpc\Pictures", System.Drawing.Imaging.ImageFormat.Png);
    }




  2. #2

    نقل قول: خطای GDI هنگام ذخیره فایل

    روی چه خطی این خطا رو میده؟
    آیا اصلا نیاز هست ۱۰۰۰ تا عکس پشت سر هم توی پیکچرباکس نمایش داده بشه؟ عکس را در بیت مپ لود کنید، تغییرش بدید و ذخیره کنید.

  3. #3
    کاربر دائمی آواتار ROSTAM2
    تاریخ عضویت
    اسفند 1390
    محل زندگی
    روستایی در کنج استان فارس
    پست
    1,160

    نقل قول: خطای GDI هنگام ذخیره فایل

    سلام.
    تغییراتت مگه چیه که نمی شه روی graphics از bitmap انجام بدی؟!
    ب احتمال 99 درصد خطا مربوط به
    System.Drawing.Imaging.ImageFormat.Png هست.

  4. #4
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,022

    نقل قول: خطای GDI هنگام ذخیره فایل

    سلام

    چندتا مساله
    1. شما تصویر را با چه نامی ذخیره میکنید؟ در آدرس باید نام و پسوند فایل هم مشخص کنید در غیر اینصورت فایل بدون Extension ذخیره میشه.
    2. این خطا برای من هم ایجاد میشه ولی در مسیرهای غیر از درایو C خطا نمیده و تصویر ذخیره میشه. باید مجوزها را احتمالا بررسی کنید.
    3. چرا از Panel استفاده کردید و متد DrawToBitmap را فراخوانی کردید؟ پس نقش PictureBox چیه؟
    4. چه لزومی داشته سایز تصویر را بر مبنای سایز Panel تنظیم کنید؟
    5. گویا تصویر موجود در PictureBox در کدها استفاده نشده.


    کاربرد دستور DrawToBitmap
    1. فرض کنید یک شیء روی فرم قرار دادید. مثل Panel و یا PictureBox.
    2. حالا فرض کن در Panel چند تا دکمه قرار دادی و یک تصویر کوچک و....
    3. حالا اگر بخواهی تمام فضای قابل روئیت همان Panel رو با تمام اشیاء داخلش به تصویر تبدیل کنید میتونید از این دستور استفاده کنید.
    4. البته کاربردهای دیگه ای هم میتونه داشته باشه. مشابه کاری که کردید. احتمالا PicturBox داخل Panel هست و با این روش قصد دارید تصویر را ذخیر کنید. بگمانم روش مناسبی نیست.


    پیشنهاد
    1. اگر تعداد تصاویر خیلی زیاد هستند اصلا UI را درگیر نکن و یک سیستم خودکار پیاده سازی کن و تنها نتایج بصورت خروجی به کاربر اعلام بشه.
    2. دوتا TextBox بذار و اندازه تصاویر را از کاربر دریافت کن و یا یک ComboBox بذار و به کاربر اندازه های از پیش تعریف شده پیشنهاد بده.
    3. انجام عملیات در حافظه به مراتب سرعت بیشتری داره تا اینکه بخواهی دونه دونه کار رو انجام بدی.
    4. اگر در حافظه کار میکنی مدیریت منابع فراموش نشه تا بتونی بدون محدودیت و برای حتی چندین هزار تصویر را بصورت مستمر عملیات انجام بدی.

  5. #5

    نقل قول: خطای GDI هنگام ذخیره فایل

    نقل قول نوشته شده توسط mmbguide مشاهده تاپیک
    سلام

    چندتا مساله
    1. شما تصویر را با چه نامی ذخیره میکنید؟ در آدرس باید نام و پسوند فایل هم مشخص کنید در غیر اینصورت فایل بدون Extension ذخیره میشه.
    2. این خطا برای من هم ایجاد میشه ولی در مسیرهای غیر از درایو C خطا نمیده و تصویر ذخیره میشه. باید مجوزها را احتمالا بررسی کنید.
    3. چرا از Panel استفاده کردید و متد DrawToBitmap را فراخوانی کردید؟ پس نقش PictureBox چیه؟
    4. چه لزومی داشته سایز تصویر را بر مبنای سایز Panel تنظیم کنید؟
    5. گویا تصویر موجود در PictureBox در کدها استفاده نشده.


    کاربرد دستور DrawToBitmap
    1. فرض کنید یک شیء روی فرم قرار دادید. مثل Panel و یا PictureBox.
    2. حالا فرض کن در Panel چند تا دکمه قرار دادی و یک تصویر کوچک و....
    3. حالا اگر بخواهی تمام فضای قابل روئیت همان Panel رو با تمام اشیاء داخلش به تصویر تبدیل کنید میتونید از این دستور استفاده کنید.
    4. البته کاربردهای دیگه ای هم میتونه داشته باشه. مشابه کاری که کردید. احتمالا PicturBox داخل Panel هست و با این روش قصد دارید تصویر را ذخیر کنید. بگمانم روش مناسبی نیست.


    پیشنهاد
    1. اگر تعداد تصاویر خیلی زیاد هستند اصلا UI را درگیر نکن و یک سیستم خودکار پیاده سازی کن و تنها نتایج بصورت خروجی به کاربر اعلام بشه.
    2. دوتا TextBox بذار و اندازه تصاویر را از کاربر دریافت کن و یا یک ComboBox بذار و به کاربر اندازه های از پیش تعریف شده پیشنهاد بده.
    3. انجام عملیات در حافظه به مراتب سرعت بیشتری داره تا اینکه بخواهی دونه دونه کار رو انجام بدی.
    4. اگر در حافظه کار میکنی مدیریت منابع فراموش نشه تا بتونی بدون محدودیت و برای حتی چندین هزار تصویر را بصورت مستمر عملیات انجام بدی.
    خیلی ممنون از پاسخ همه دوستان !!
    ببینید مثلا من هزار تا عکس دارم و میخوام روی همه این عکسها یه متن بنویسم که این متن روی همه عکسها یکسان هست !! نمیخوام برم تک تک عکسها رو داخل فتوشاپ و اون متن رو روی عکس بنویسم و ذخیره کنم !!! برای اینکه بتونم خیلی سریع این کار رو انجام بدم اومدم و یه برنامه نوشتم که بره داخل یه دایرکتوری که داخلش هزار تا عکسه ، تک تک عکسها رو بگیره بندازه داخل یه پیکچرباکس و فقط نام اون عکس رو بزاره داخل تکست باکسی که روی عکس قرار دادم و بعد ذخیره کنه با همون نام!!! نا گفته نماند که خود پیکچر باکس رو گذاشتم داخل پنل و تکست باکس رو هم گذاشتم بالای پیکچر باکس و حالا عکسی که قرار هست دخیره بشه، کل پنل هست که شامل اون تکست باکس و پیکچر باکس میشه!! حالا وقتی میخواد ذخیره بشه همچین مشکلی پیش میاد !!!

  6. #6
    کاربر دائمی
    تاریخ عضویت
    خرداد 1391
    محل زندگی
    ایران
    پست
    370

    نقل قول: خطای GDI هنگام ذخیره فایل

    نقل قول نوشته شده توسط qasemf مشاهده تاپیک
    خیلی ممنون از پاسخ همه دوستان !!
    ببینید مثلا من هزار تا عکس دارم و میخوام روی همه این عکسها یه متن بنویسم که این متن روی همه عکسها یکسان هست !! نمیخوام برم تک تک عکسها رو داخل فتوشاپ و اون متن رو روی عکس بنویسم و ذخیره کنم !!! برای اینکه بتونم خیلی سریع این کار رو انجام بدم اومدم و یه برنامه نوشتم که بره داخل یه دایرکتوری که داخلش هزار تا عکسه ، تک تک عکسها رو بگیره بندازه داخل یه پیکچرباکس و فقط نام اون عکس رو بزاره داخل تکست باکسی که روی عکس قرار دادم و بعد ذخیره کنه با همون نام!!! نا گفته نماند که خود پیکچر باکس رو گذاشتم داخل پنل و تکست باکس رو هم گذاشتم بالای پیکچر باکس و حالا عکسی که قرار هست دخیره بشه، کل پنل هست که شامل اون تکست باکس و پیکچر باکس میشه!! حالا وقتی میخواد ذخیره بشه همچین مشکلی پیش میاد !!!

    سلام
    شما کلا مسیر رو اشتباه رفتی
    برای اضافه کردن متن به تصویر نیازی به تکست باکس و ... نیست.

    یه نگاه به لینک زیر بنداز

    https://stackoverflow.com/questions/...age-in-c-sharp

  7. #7
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,022

    نقل قول: خطای GDI هنگام ذخیره فایل

    سلام

    راه حل های پست شماره #2 و #6 را دنبال کنید و روش خودتان را کنار بگذارید. براحتی میتونید تصاویر بی شماری را در اندازه های مختلف و با رسم یک متن در موقعیت دلخواه ایجاد و ذخیره کنید. با توجه به اینکه نوشته مورد نظر شما همان نام فایل هست پیشنهاد میکنم از کلاس Path استفاده کنید که میتونید کنترل های بیشتری روی مسیر یک فایل داشته باشید. همچنین با توجه به اینکه احتمالا باید یک سیستم خودکار را پیاده سازی کنید سعی کنید برای سناریوهای مختلف برنامه بنویسید:
    1. بررسی وجود یک فایل همنام در مقصد
    2. اگر فایل تکراری بود آیا Overwrite انجام شود یا یک اندیس اضافه شود و بعد ذخیره شود (البته بعد از اندیس هم باید بررسی کنید که نام جدید همچنان تکراری نباشد و...)

  8. #8

    نقل قول: خطای GDI هنگام ذخیره فایل

    نقل قول نوشته شده توسط mmbguide مشاهده تاپیک
    سلام

    راه حل های پست شماره #2 و #6 را دنبال کنید و روش خودتان را کنار بگذارید. براحتی میتونید تصاویر بی شماری را در اندازه های مختلف و با رسم یک متن در موقعیت دلخواه ایجاد و ذخیره کنید. با توجه به اینکه نوشته مورد نظر شما همان نام فایل هست پیشنهاد میکنم از کلاس Path استفاده کنید که میتونید کنترل های بیشتری روی مسیر یک فایل داشته باشید. همچنین با توجه به اینکه احتمالا باید یک سیستم خودکار را پیاده سازی کنید سعی کنید برای سناریوهای مختلف برنامه بنویسید:
    1. بررسی وجود یک فایل همنام در مقصد
    2. اگر فایل تکراری بود آیا Overwrite انجام شود یا یک اندیس اضافه شود و بعد ذخیره شود (البته بعد از اندیس هم باید بررسی کنید که نام جدید همچنان تکراری نباشد و...)
    بحث فایل تکراری و این چیزا نیست فکر میکنم بحث بحث حافظه باشه همون بحث مدیریت منابع که شما عرض کردین!!! چون باید هر عکس در داخل پیکچر باکس لود بشه و بعد ذخیره بشه حالا چون سرعت بارگذاری زیاد هست شاید مشکل به این خاطر باشه البته من از filestream استفاده کردم اما خطای عدم دسترسی به فایل میده!!! راه حل همینه؟؟

  9. #9
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,022

    نقل قول: خطای GDI هنگام ذخیره فایل

    سلام

    در پست شماره #4 موضوعی را در خصوص permission یا مجوز دسترسی گفتم. ابتدا با تغییر آدرس به یک درایو دیگه اقدام به ذخیره سازی کنید و اگر با مسیرهای درایو C مشکل وجود داشت که باید مجوزهای دسترسی به آن مسیر را تغییر بدید. البته اگر برنامه را باید کاربر دیگه ای در سیستم دیگه ای استفاده کنه حتما از try catch استفاده کن و در صورت بروز خطا به کاربر اطلاع بده.

  10. #10
    کاربر دائمی آواتار mazoolagh
    تاریخ عضویت
    اردیبهشت 1384
    پست
    2,522

    نقل قول: خطای GDI هنگام ذخیره فایل

    فوتوشاپ خودش امکان اسکریپت نویسی و ساخت مکرو برای عملیات تکراری داره.
    من خیلی سال پیش روی ورژن های قدیمی (غیر cloud) دقیقا مشابه همین سناریو رو انجام دادم و ساده هم هست ولی دقیقا یادم نیست مراحلش چی بود.
    فکر کنم photoshop automation رو گوگل کنین روش کار رو پیدا کنین، بهتر از این روشی هست که الان در پیش گرفتین.

  11. #11
    کاربر دائمی آواتار mmbguide
    تاریخ عضویت
    اسفند 1386
    محل زندگی
    منظومه شمسی
    پست
    1,022

    نقل قول: خطای GDI هنگام ذخیره فایل

    باید از یک مجموعه دستورات در فوتوشاپ یک record تهیه کنید و بعد به برنامه بگید که این کار را روی تمام فایل های موجود در مسیر تعیین شده انجام بده. ولی مگه موضوع تاپیک درخصوص آموزش کد نبود؟ یا برای رفع یک نیاز موردی بوده؟

  12. #12
    کاربر دائمی آواتار ShayanFiroozi
    تاریخ عضویت
    شهریور 1397
    محل زندگی
    بندرعباس ، خلیج همیشه فارس
    سن
    37
    پست
    181

    Thumbs up نقل قول: خطای GDI هنگام ذخیره فایل

    سلام ،

    شما باید برای ذخیره یک فایل عکس از Full Path استفاده کنین :



    bmp1.Save(@"C:\Users\hiradpc\Pictures\1234.png", System.Drawing.Imaging.ImageFormat.Png);


    ضمنا سخت گیری های ویندوز ( مخصوصا 10 ) جهت دسترسی به درایو C گاها آزارد هنده هستند ، پیشنهاد میکنم با درایو دیگه ای کار کنین و در قسمت Security به پوشه مورد نظر Everyone Permission و با حالت Full Access بدین

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •