الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

الحصول على معلومات صورة

مغلق
بدأه micheal R jordan في 14 أغسطس 2007 · 17 رد · 1,435 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إخواني الاعزاء أريد الحصول على

width + height + dimension

الخاص بصورة ما

أرجو أن أجد عندكم كود لهذا الامر وحبذا لو كان بواسطة دوال API

وشكرا

#2

حملها فى Picturebox , أجعل خاصية Autosize على True و :

' StdPicture's Width and Height properties are expressed in
' Himetric units. 
With Picture1
	width = CInt(.ScaleX(.Picture.Width, vbHimetric, vbPixels))
	height = CInt(.ScaleY(.Picture.Height, vbHimetric, _
		vbPixels))
End With

تم تعديل هذه المشاركة بواسطة msayed2004 في 14 أغسطس 2007 في 15:22

#3

ما بعرف لماذا api لكن ببساطة

 Dim img As StdPicture
img = LoadPicture("yourpic")

Print img.Width
Print img.Height

او انظر الى المقالة التالية :

http://vbnet.mvps.org/index.html?code/bitmap/bitmapinfo.htm

#4

السلام عليكم

شكرا إخوان

في الحقيقة أحبذ API لانني في الحقيقة أستعمل دوال API في كل شيء شيء يعني أقوم بكتابة كل شيء

CreateWindowEX و SendMessage و RegisterClassEx إلى آخره

ولكن :

شيء أخير كيف يمكنني الحصول على المعلومات بدون تحميلها في picture Box

هناك binary access ولكنني لا أستطيع الحصول على dimension في المثال المرفق

وهناك أمر آخر هذا المثال يعمل فقط على BitMap يعني *.BMP

أرجو المساعدة ولا زلت أصر على الــ API

شكرا

Get_BitMap_Informations.rar

#5
اقتباس
هناك binary access ولكنني لا أستطيع الحصول على dimension في المثال المرفق
أكيد هو متوفر لكن تخيل أنك هتحتاج تتعرف على كل Format على حده , و أحيانا الـ Format الواحد بيبقى فيه أختلافات.
#6

السلام عليكم

أخي الكريم هل عندك أي مثال في الموضوع

شكرا

#7

خش على موقع Wotsit.org و نزل ( أو تتبع رابط ) شرح للـ Format بتاعة اى نوع و ليكن BMP , بص فى الشرح هتلاقة حاجة أسمها BITMAPINFOHEADER , و الـ Header والحاجات دى بنستعمل فيها دوال زى Get , يعنى برضة مش APIs

هو أنت مش عايز تحمل الصور فى اداة ليه ؟

بتعمل DLL مثلا و مش عايز اى Form تكون فيه ؟

#8

السلام عليكم

في الحقيقة أنا أريد أن أعرف فقط كيفية عمل الامر

كيف يحصل النظام على طول وعرض الصورة

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

إذا لم تكن الايقونة 16x16 أو 32x32 فهو لا يقبلها ولكن لو استعملت SendMessage مع WM_SETICON لا يحصل أي خطأ

ثم حاولت رسم الايقونة على الفورم وكل هذا يحتاج إلى LoadImage وهذه الدالة تحتاج إلى dimension ولذلك أردت الحصول عليه

واستعماله بدل 16x16 أو 32x32 وحتى GetIconInfo لم تنفع جيدا

آمل أن تفهم ما أريد

المهم

Change_Window_Icon.rar

#9

دالة LoadImage مش بتحتاج دائما لتحديد طول و عرض :

LEFT TO RIGHT
اقتباس
· cxDesired

Specifies the width, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CXICON or SM_CXCURSOR system metric value to set the width. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource width.

· cyDesired

Specifies the height, in pixels, of the icon or cursor. If this parameter is zero and the fuLoad parameter is LR_DEFAULTSIZE, the function uses the SM_CYICON or SM_CYCURSOR system metric value to set the height. If this parameter is zero and LR_DEFAULTSIZE is not used, the function uses the actual resource height.

راجع شرح الدالة بالتفصيل هنا LoadImage أو من الـ MSDN

---------------------------------

ملحوظة عن طريقة كتابتك للكود , أنت بتستعمل Function لأى حاجة ليه ؟!

الـ Function تعود بقيمة ( Returns a value ) على عكس الـ Sub اللى المفروض تستخدمه طالما أنك مش هتعود بقيمة.

تم تعديل هذه المشاركة بواسطة msayed2004 في 15 أغسطس 2007 في 14:48

#10

السلام عليكم

آسف جدا على التأخير

الحقيقة أن الامر لم ينفع لان SM_CYICON أو SM_CXICON ستعيد 32X32 إذا استعملت LR_DEFAULTSIZE

وإذا لم أستعملها تعيد 16X16

عندي سؤال

كيف أقرأ header information للأيقونة ؟

#11

حسب الكلام بيقولك أن أستعملت 0 للـ Parameters دى بدون LR_DEFAULTSIZE , هل جربت تمرر لها 0 ؟!

#12

استعمل فقط الدالة GetObject بالبرامترت الملائمة

#13

السلام عليكم

نعم جربت الطريقتين المذكورتين

أما بخصوص الدالة GetObject فهي جيدة إلا أنها لا تعمل إلا مع الصور من نوع BMP

وهذا مثال على ذلك

Option Explicit

Private Type Bitmap
   bmType As Long
   bmWidth As Long
   bmHeight As Long
   bmWidthBytes As Long
   bmPlanes As Integer
   bmBitsPixel As Integer
   bmBits As Long
End Type

Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" _
(ByVal hObject As Long, ByVal nCount As Long, ByRef lpObject As Any) As Long


Private Declare Function LoadImage Lib "User32.dll" Alias "LoadImageA" ( _
   ByVal hInst As Long, ByVal lpszName As String, ByVal uType As Long, _
   ByVal cxDesirded As Long, ByVal cyDesired As Long, ByVal fuLoad As Long) As Long

 Private Const IMAGE_BITMAP = &O0
 Private Const LR_LOADFROMFILE = 16

Private Sub CmdBitapDim_Click()
Dim bm As Bitmap
Dim hBitmap As Long
hBitmap = LoadImage(App.hInstance, TxtPath, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
GetObject hBitmap, Len(bm), bm

MsgBox "The Height = " & bm.bmHeight & vbNewLine & "The Width = " & bm.bmWidth
End Sub

من http://studentsofgamedesign.com/VBGT_BitmapBitsAndDIBs.htm

شكرا

تم تعديل هذه المشاركة بواسطة micheal R jordan في 22 أغسطس 2007 في 18:58

#14

لا تحتاج إلى الدالة LoadImage حمل الصورة ( كافة الأنساق المحتملة) مباشرة في الـ PictureBox ثم استعمل GetObject و مرر لها Handel الصورة (الخاصية Picture1.Picture.Handel على ما أذكر)

كما تستطيع الحصول على طول و عرض الصورة دون اللجوء للـ Api فقط من خلال Picture1.Picture.Width و Picture1.Picture.Height

#15

السلام عليكم

أخي ytreza إذا كنت حملت المثال الاول الذي رفعته فإن به 4 icons

استعمل هذا الكود

Picture1.Picture = LoadPicture("128.ico")

وستحصب على خطأ وهو فقط بخصوص 128x128

ولكن النظام ليس عنده أي مشكلة وعندما أستعمل LoadImage بهذه الطريقة

Sub LoadIconToPic(PicIcon As PictureBox)
  Dim hIcon As Long

PicIcon.AutoRedraw = True
PicIcon.AutoSize = True

   hIcon = LoadImage(App.hInstance, CmbIconPath, IMAGE_ICON, 128, 128, LR_LOADFROMFILE)
PicIcon.Cls
   Call DrawIconEx(PicIcon.hDC, 0, 0, hIcon, 0, 0, 0, 0, DI_NORMAL)
   Call DestroyIcon(hIcon)

End Sub

لا يحصل أي خطأ

السؤال المطروح كيف يحصل النظام على هذه المعلومة?

والمشكلة هي في header information بتاع Iocn

تم تعديل هذه المشاركة بواسطة micheal R jordan في 24 أغسطس 2007 في 17:55

#16

و عليكم السلام و رحمة الله

السبب و الله أعلم راجع لعجز البيسك عن تحميل أيقونات أكبر من 32x32 بينما الدالة LoadImage تسطيع ذلك راجع المثال في الرابط أدناه

Create a VB Picture from an API Icon Handle

لا يمكنني تجربة المثال الذي أرفقته لأن جهازي عاطل أنا أتصل من مقهى انترنت لهذا ربما قد لا أكون دقيقا في الرد

#17

السلام عليكم

شكرا لكم على المساعدة

وجدت بعض الاشياء المفيدة رغم أنني لم أجربها بعد

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…