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

كيف أستطيع إدراج صورة في PictureBox

بدأه Aram.m في 28 مارس 2012 · 5 رد · 1,024 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم،

كيف يمكن أن أدرج صورة في pictureBox من خلال زر بحث (browse button) باستخدام openFileDialog أو أي طريقة أخرى في فيجوال ستوديو.

وهل يمكن تحويلها الى bitmap ؟

وهذا كود لمثل ما أريد ولكنه C#

private void button1_Click(object sender, EventArgs e) 
{ 
    // Wrap the creation of the OpenFileDialog instance in a using statement, 
    // rather than manually calling the Dispose method to ensure proper disposal 
    using (OpenFileDialog dlg = new OpenFileDialog()) 
    { 
        dlg.Title = "Open Image"; 
        dlg.Filter = "bmp files (*.bmp)|*.bmp"; 

        if (dlg.ShowDialog() == DialogResult.OK) 
        { 
            PictureBox PictureBox1 = new PictureBox(); 

            // Create a new Bitmap object from the picture file on disk, 
            // and assign that to the PictureBox.Image property 
            PictureBox1.Image = new Bitmap(dlg.FileName); 
        } 
    } 
}
#2
اقتباس
كيف يمكن أن أدرج صورة في pictureBox من خلال زر بحث (browse button) باستخدام openFileDialog أو أي طريقة أخرى في فيجوال ستوديو.

وهل يمكن تحويلها الى bitmap ؟

أخى الفاضل هذا قسم سي و سي++ القياسي

بالنسبة لــ سي شارب يمكنك طرح سؤالك:

قسم سي شارب دوت نت

post-15367-027053900%201340345097.gifpost-15367-087183200%201340344597.gif
post-247365-0-10080400-1379403554_thumb.

#3
AudaNix كتب:

أخى الفاضل هذا قسم سي و سي++ القياسي

بالنسبة لــ سي شارب يمكنك طرح سؤالك:

قسم سي شارب دوت نت

شكراً على ردك، ولكن أريد الكود بلغة سي++ ولهذا وضعت الاستفسار هنا :)

#4

السلام عليكم

اقتباس
شكراً على ردك، ولكن أريد الكود بلغة سي++ ولهذا وضعت الاستفسار هنا smile.gif

تفضل أخى رابط القسم المناسب :

قسم سي++ دوت نت

لاتحسبن العلم ينفع وحده مالم يتوج ربه بخلاق

لا إله إلا أنت سبحانك إني كنت من الظالمين

#5
Aram.m كتب:

السلام عليكم،

كيف يمكن أن أدرج صورة في pictureBox من خلال زر بحث (browse button) باستخدام openFileDialog أو أي طريقة أخرى في فيجوال ستوديو.

وهل يمكن تحويلها الى bitmap ؟

وهذا كود لمثل ما أريد ولكنه C#

private void button1_Click(object sender, EventArgs e) 
{ 
    // Wrap the creation of the OpenFileDialog instance in a using statement, 
    // rather than manually calling the Dispose method to ensure proper disposal 
    using (OpenFileDialog dlg = new OpenFileDialog()) 
    { 
        dlg.Title = "Open Image"; 
        dlg.Filter = "bmp files (*.bmp)|*.bmp"; 

        if (dlg.ShowDialog() == DialogResult.OK) 
        { 
            PictureBox PictureBox1 = new PictureBox(); 

            // Create a new Bitmap object from the picture file on disk, 
            // and assign that to the PictureBox.Image property 
            PictureBox1.Image = new Bitmap(dlg.FileName); 
        } 
    } 
}

باستخدام مكتبة GDIPlus على الكود

#include <windows.h>
#include <tchar.h>
static HWND CtrlHwnd_A , CtrlHwnd_B;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HBITMAP ImageFromFile(WCHAR* ImageFileName);
int ImageSize(HBITMAP hImage,int Mask);

int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    TCHAR szWindowClass[] = _T("win32app");
    TCHAR szTitle[] = _T("Win32 Application");
    WNDCLASSEX wcex;
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = 0;
    wcex.hCursor        = 0;
    wcex.hbrBackground  = (HBRUSH)GetSysColorBrush(COLOR_3DFACE);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = 0;
    RegisterClassEx(&wcex);
    HWND hWnd = CreateWindow(szWindowClass,szTitle,
    WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,
    406,432,0,0,hInstance,NULL);
	ShowWindow(hWnd,nCmdShow);
	CtrlHwnd_A = CreateWindowEx(0,"Button","OpenFile",BS_CENTER | WS_CHILD,10,10,200,50,hWnd,0,hInstance,0);
	DWORD dwStyle = WS_CHILD|WS_VISIBLE|SS_BITMAP;
    CtrlHwnd_B = CreateWindowEx(0,"STATIC","",dwStyle,10,70,350,310,hWnd,0,hInstance,0);
	ShowWindow(CtrlHwnd_A,nCmdShow);
	ShowWindow(CtrlHwnd_B,nCmdShow);
    UpdateWindow(hWnd);
    MSG msg;
    while (GetMessage(&msg,0,0,0))
    {
    if (!TranslateAccelerator(msg.hwnd,0, &msg))
      {
         TranslateMessage(&msg);
         DispatchMessage(&msg);
      }

    }

   return (int) msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HWND CtrlHwnd;
    switch (message)
    {
    case WM_COMMAND:
    CtrlHwnd = (HWND) lParam;
    switch (HIWORD(wParam))
    {
    case BN_CLICKED:
    if (CtrlHwnd == CtrlHwnd_A)
    {
	OPENFILENAMEW pOFile;
	WCHAR* Title = L"قم باختيار ملف الصورة";
	WCHAR* Filter = L"Images(*.GIF;*.PNG;*.JPG;*.BMP)\0*.GIF;*.PNG;*.JPG;*.BMP\0\0";
    WCHAR BFile[MAX_PATH];
	WCHAR* InitialDirDir = L"C:\\";
    ZeroMemory(&pOFile, sizeof(pOFile));
    pOFile.lStructSize = sizeof(pOFile);
    pOFile.hwndOwner = hWnd;
    pOFile.lpstrFile = BFile;
    pOFile.nMaxFile = sizeof(BFile);
    pOFile.lpstrFilter = Filter;
    pOFile.lpstrTitle = Title;
	pOFile.lpstrInitialDir = InitialDirDir;
    pOFile.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
	if (GetOpenFileNameW(&pOFile)==TRUE)
	{
    HBITMAP hBMP = ImageFromFile(BFile);
	if (hBMP) {SendMessage(CtrlHwnd_B,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM) hBMP);}
    }
    }
    break;
    case BN_DBLCLK:
    break;
    }
    break;
    case WM_PAINT:
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, message, wParam, lParam);
}





HBITMAP ImageFromFile(WCHAR* ImageFileName)
{
//يمكنك عن طريق هذه الوظيفة رفع الصور من ملفاتها
//BMP, PNG, GIF, JPEG أنواع الصور و التي من الممكن رفعها هي
//الرجوع
//HBITMAP نجاح: مقود الكائن الصوري
//فشل: صفر
//الأخطاء
//GetLastError(void) للحصول عليها عن طريق الوظيفة
HMODULE HMO = LoadLibrary("gdiplus.dll");
if (!HMO)
{SetLastError(-1);
return 0;}

typedef struct {
UINT32 GdiplusVersion;
int DebugEventCallback;
BOOL SuppressBackgroundThread;
BOOL SuppressExternalCodecs;
} GplSI;

GplSI Gp;
Gp.GdiplusVersion = 1;
Gp.DebugEventCallback = 0;
Gp.SuppressBackgroundThread = 0;
Gp.SuppressExternalCodecs = 0;
int Status,token,output;
class GpImage {};

typedef int (CALLBACK* parametersA) (LPVOID,LPVOID,LPVOID);
parametersA ProcA = (parametersA) GetProcAddress(HMO,_T("GdiplusStartup"));
Status = ProcA(&token,&Gp,&output);
if (Status != 0)
{SetLastError(-2);
return 0;}

GpImage *image;
typedef int (CALLBACK* parametersB) (WCHAR*,GpImage**);
parametersB ProcB = (parametersB) GetProcAddress(HMO,_T("GdipLoadImageFromFile"));
Status = ProcB(ImageFileName,ℑ);
if (Status != 0)
{SetLastError(-3);
return 0;}

int ImageType;
typedef int (CALLBACK* parametersC) (GpImage*,int*);
parametersC ProcC = (parametersC) GetProcAddress(HMO,_T("GdipGetImageType"));
Status = ProcC(image,&ImageType);
if (Status != 0 || ImageType != 1)
{SetLastError(-4);
return 0;}

HBITMAP hbmReturn;
typedef int (CALLBACK* parametersD) (GpImage*,HBITMAP*,int);
parametersD ProcD = (parametersD) GetProcAddress(HMO,_T("GdipCreateHBITMAPFromBitmap"));
Status = ProcD(image,&hbmReturn,0);
if (Status != 0)
{SetLastError(-5);
return 0;}

typedef int (CALLBACK* parametersE) (LPVOID);
parametersE ProcE = (parametersE) GetProcAddress(HMO,_T("GdiplusShutdown"));
ProcE(&token);

FreeLibrary(HMO);

SetLastError(0);
return hbmReturn;
}

int ImageSize(HBITMAP hImage,int Mask)
{
HMODULE HMO = LoadLibrary("gdiplus.dll");
if (!HMO)
{SetLastError(-1);
return 0;}

typedef struct {
UINT32 GdiplusVersion;
int DebugEventCallback;
BOOL SuppressBackgroundThread;
BOOL SuppressExternalCodecs;
} GplSI;

GplSI Gp;
Gp.GdiplusVersion = 1;
Gp.DebugEventCallback = 0;
Gp.SuppressBackgroundThread = 0;
Gp.SuppressExternalCodecs = 0;
int Status,token,output;
class GpImage {};

typedef int (CALLBACK* parametersA) (LPVOID,LPVOID,LPVOID);
parametersA ProcA = (parametersA) GetProcAddress(HMO,_T("GdiplusStartup"));
Status = ProcA(&token,&Gp,&output);
if (Status != 0)
{SetLastError(-2);
return 0;}

GpImage *image;
typedef int (CALLBACK* parametersB) (HBITMAP,HANDLE,GpImage**);
parametersB ProcB = (parametersB) GetProcAddress(HMO,_T("GdipCreateBitmapFromHBITMAP"));
Status = ProcB(hImage,0,ℑ);
if (Status != 0)
{SetLastError(-3);
return 0;}

int ImageSize;
if (Mask)
{
typedef int (CALLBACK* parametersC) (GpImage*,int*);
parametersC ProcC = (parametersC) GetProcAddress(HMO,_T("GdipGetImageWidth"));
Status = ProcC(image,&ImageSize);
if (Status != 0)
{SetLastError(-4);
return 0;}
} else {
typedef int (CALLBACK* parametersC) (GpImage*,int*);
parametersC ProcC = (parametersC) GetProcAddress(HMO,_T("GdipGetImageHeight"));
Status = ProcC(image,&ImageSize);
if (Status != 0)
{SetLastError(-4);
return 0;}
}

typedef int (CALLBACK* parametersD) (LPVOID);
parametersD ProcD = (parametersD) GetProcAddress(HMO,_T("GdiplusShutdown"));
ProcD(&token);

FreeLibrary(HMO);

SetLastError(0);
return ImageSize;
}
1

Wolf_Oman

صرح السماء

wolf9228

ناقوس الخطر

#6

شكراً جزيلاً

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