أريد كود لمعرفة حجم الصورة قبل حفظها
بمعنى أننا نحفظ الصورة كالآتي:
Savepicture(picture,filename)0
فتأخذ حجماً على القرص الصلب
وما أريده هو معرفة الحجم الذي ستشغله على القرص
الصلب قبل أن أحفظها
/لغة البرمجة
Visual Basic 6
أرجو سرعة التلبية
...وشكراً
أريد كود لمعرفة حجم الصورة قبل حفظها
بمعنى أننا نحفظ الصورة كالآتي:
Savepicture(picture,filename)0
فتأخذ حجماً على القرص الصلب
وما أريده هو معرفة الحجم الذي ستشغله على القرص
الصلب قبل أن أحفظها
/لغة البرمجة
Visual Basic 6
أرجو سرعة التلبية
...وشكراً
أرجو الرد
أين أنتم؟؟؟؟؟؟؟؟؟ :cry:
الحل الأسهل انك تحفظها في مجلد الـ Temp الأول
واذا تقصد تتأكد من ان البارتيشن على آخره ولا لا .. هاندل الإيرور .. يعنى مثلا كده
Private Sub Test
اعتذر عن عدم تمكني للمتابعه الدورية في وقتنا الحالي
فليقبل الجميع تقديري واحترامي .. ولكم تحياتي
ليس هذا ما أقصد أخي
أريد فقط أن أعرف الحجم الذي ستأخذه الصورة عند حفظها على القرص بدون أن أحفظها
اخي الكريم استخدم الدالة filelen لارجاع حجم الملف بالبايت
وهذا مثال سريع لارجال حجم الملف بالكيلو بايت
Dim FSize As Long
FSize = FileLen("c:\fieName.exe")
MsgBox "File size:" & Round((FSize / 1024), 1) & " kb"fieName.exe = اسم ونوع الملف المطلوب . اي بمعنى انك تمرر مسار الملف واسمه واحصل على حجمة
ثم تقسم الناتج على 1024 لان كل واحد كيلو بايت يساوي هذا العدد .
تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
السلام عليكم ورحمة الله وبركاته
أخي الكريم Omani/
هذا لمعرفة حجم ملف موجود على القرص الصلب ولكن كما قلت فأنا أريد معرفة الحجم الذي ستشغله الصورة على القرص بعد حفظها ولكن دون أن أحفظها.
يعني مثلاً عند حفظ الصورة يتم
1- قراءتها بواسطة السيستم.
2-وبالتالي تحديد حجم لها.
3- ثم اكسابها هذا الحجم.
فما أريده بالضبط أن يقوم برنامجي بنفس عمل السيستم أي يقرأ الصورة ويحدد الحجم الذي يجب أن تأخذه ولكن
دون تنفيذ الخطوة رقم (3) أي أنني لا أريد أن أحفظها إنما أريد فقط معرفة الحجم الذي ستكون عليه إذا تم حفظها
أرجو التفهم
وشكراً...
تم تعديل هذه المشاركة بواسطة zxcqwe في 22 نوفمبر 2008 في 13:35
اولا الصورة من اين مصدرها ؟؟؟؟
في المثال السابق فقط اختر مصدر الصورة ..
هل تقصد الصورة في قاعدة البيانات ام ماذا ؟؟
فأنا لم افهم ماتريد بالضبط
تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
فلنفترض ـ أخي ـ أنه هناك picture box وقد وضعت فيه صورة أياً كان مصدرها (لنقُل التقطنا صورة للشاشة ووضعناها في هذا الكائن) لذلك فليس لها مصدر أي أنها لا تملك path لأنها ليست موجودة على الجهاز أصلا وإلا لكنت عرفت حجمها كأي ملف عادي
وشكراً
أرجو الرد
وشكراً...
اخي الكريم : لابد من حفظ الصورة بشكل مؤقت لتعرف الحجم ومن ثم اعادة حذفها .
لحفظ الصورة بشكل مؤقت ومعرفة الحجم وحذفها مباشرة استخدم الكود التالي
dim Fl as integer if dir(app.path & "\temp.jpg")<>"" then kill app.path & "\temp.jpg" end if savepicture picture1.picture app.path & "\temp.jpg" fl=filelen(app.path & "\temp.jpg") kill app.path & "\temp.jpg" msgbox "the file size is " & (fl/1024) & kb
تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
نعم أخي كلامك صحيح وكنت أنوي فعل شئ من هذا القبيل إذا لم أجد مرادي
ولكن هل تعلم في برامج تصميم الصور المشهورة عندما تنتهي من التصميم وتأتي إلى حفظ الصورة يظهر لك حجم الصورة عند حفظها فهل يحفظها البرنامج في ال temp ثم يقوم بحذفها أم ماذا؟؟؟
هذا لأن برنامجي سيحتاج لمعرفة حجم عدد كبير جداً من الصور وفي وقت قصير لذلك أظن أن حفظ الصورة ثم حذفها هذا العدد من المرات سيؤثر على عمل البرنامج.
وشكراً أخي على المجهود...
تم تعديل هذه المشاركة بواسطة zxcqwe في 29 نوفمبر 2008 في 10:50
يمكن حساب حجم الصورة بصفة تقريبية بالعلاقة
عمق ألوان الصورة محسوب بالـ Bits * ارتفاع الصورة محسوب بالـ Pixels * عرض الصورة محسوب بالـ Pixels
و كل هذه المعاملات يمكن معرفتها باستعمال الدالة GetObject و البنية BITMAP
أو باستعمال الخواص Height و Width للـ Picture(و ليس للـ PictureBox) و افتراض أن عمق الألوان هو 24 bits و لكن الحل الأول أحسن
السلام عليكم أخي/
الطريقة الأولى لم أعرف كيفية استخدام GetObject ولكني استخدمت صورة موجودة على الجهاز أصلاً وقمت بضرب بعداها في 24(علماً بأن bit depthe لها يساوي 24 + امتدادها bmp) ولكن الناتج لم يكن مساوياً لحجمها .
فهل أخطأت فهمك أم ماذا؟؟؟
أرجو الإفادة
وشكراً...
أخواني الكرام/
لأضيق نطاق البحث فسأخبركم بما أريد عمله بالضبط لكي يخبرني من يعرف طريقة أخرى غير الحجم
فلنفترض أنه توجد لديّ صورتان بنفس المواصفات التي تكلمت عنها(أي أنهما ليستا على الجهاز وإنما هما في البرنامج بأي طريقى كانت ـ مثلاً تم وضعهم عن طريق الحافظة "picture1.picture=clipboard.getdata" ـ ).
المطلوب: هو التفريق بين الصورتين
يعني مثلاً عندما يكون لديك نصان في 2textboxes فللتفرقة بينهم نكتب الآتي:
if text1.text=text2.text then
print 1
else
print 2
end if
ولكن عندما نريد معرفة هل الصورتان متطابقتان أم لا فماذا نفعل؟؟؟
ملحوظة : يمكن أن تكون الصورتان بنفس الأبعاد (Height,width) ولكنهما مختلفتان.
ملحوظة2 : الحل الآتي (أن يتم حفظ الصورتان والتحقق من حجمهما بالبايت ثم حذفهما ثانية) مرفوض وأي حل آخر به حفظ الصور ثم حذفهما مرفوض أيضاً وهذا لأنني سأستخدم هذا الأمر آلاف المرات في البرنامج فبالتالي لا يمكن أن أحفظ صوراً ثم أحذفها آلاف المرات.
أرجو ممن لديه فكرة لتنفيذ هذا الأمر أن يتكرم ويشارك بفكرته.
وشكراً..
اخي الكريم : في هذه الحالة لا بد من تحويل القراءة الى Binary ومن ثم المقارنه بينهما . ولكنني لا استطيع افادتك اكثر والسبب في اني لم اتمكن للان من قراءة الصورة من داخل البكتشر بكس ... اما قراءتها من ملف فسهل جدا وتستطيع عمله باكثر من طريقة ...
تحياتي
OMANI FOR EVER
-------------------------------------------------

-------------------------------------------------
السلام عليكم...
بالنسبة إلى الـ Bitmaps فإنه يمكن حساب حجمها كالتالي:
1. حساب حجم الصف بالبايت بالمعالدلة: حجم الصف = 4 × [ ( ( عمق البت × عرض الصورة ) + 31 ) / 32 ]
لأن عرض الصف يكون دائماً من مضاعفات الـ DWORD (أي Long في Visual Basic) و هو ما يساوي 4 بايت.
2. حجم الصورة = 54 + حجم الصف × ارتفاع الصورة.
العدد 54 هو عدد البايتات التي يشغلها رأس الصورة (BitmapHeader).
الكود التالي يقوم بهذه العملية على صورة من النوع Bmp في PictureBox
كما في الصورة التالية:
أما بالنسبة لمقارنة الصور فإن لي مشاركة حول هذا الموضوع منذ عدة أشهر. إذا وجدتها فسأخبرك بها إن شاء الله تعالى.
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
تعقيب
السلام عليكم...
فقط تعقيب على المشاركة السابقة: يمكن حساب حجم الـ Bitmap دون الحاجة إلى حساب حجم الصف لأن حجم الصف بالبايت موجود ضمن الـ BITMAP type كالتالي:
و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
السلام عليكم...
بالنسبة إلى مقارنة صورتين...
ضع على الـ Form مكونين إضافيين من الـ PictureBox (مثلاً Picture1 و Picture2) و اضبط الخاصية Visible لكليهما على False ثم استعمل الكود التالي:
ثم استعمل الدالة كالتالي:
الدالة Are2PicsEqual تعمل مقارنة على أساس بكسل مقابل بكسل. قد تعيد نتيجة سريعة و قد تتأخر. لاحظ أنها تتوقف عن المقارنة بمجرد وجود اختلاف بين الصورتين.
الدالة التالية فقط زيادة من عندي و هي للتأكد ما إذا كانت الصورة فارغة أم لا:
نرجو الاستفادة و السلام.
وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ
صدق الله العظيم
بارك الله فيك أخي الكريم على المجهود فقد استفدت فائدة عظيمة
وقد أرسلت لك رسالة بخصوص طلب آخر فهل وصلتك؟؟؟