امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
متخصص هاي VC جواب بدند
نویسنده پیام
marvel_vcpp آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 6
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #1
متخصص هاي VC جواب بدند

در Visual C چگونه می توان با داشتن ID یک Bitmap که به عنوان Resource برنامه می باشد فایل bmp مربوط به این Bitmap را روی هارد ذخیره کرد؟

ما زنده به آنیم که آرام نگیریم موجیم که آسودگی ما عدم ماست
۱۰-مرداد-۱۳۸۵, ۱۱:۰۴:۳۶
ارسال‌ها
پاسخ
marvel_vcpp آفلاین
كاربر تک ستاره
*

ارسال‌ها: 35
موضوع‌ها: 6
تاریخ عضویت: اسفند ۱۳۸۴

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #2
RE: متخصص هاي  VC جواب بدند
خیلی ازت ممنونم .
من این سوال رو خیلی وقت پیش پرسیده بودم همون موقع جوابش رو پیدا کردم.

ما زنده به آنیم که آرام نگیریم موجیم که آسودگی ما عدم ماست
۲۶-مرداد-۱۳۸۵, ۰۹:۴۱:۴۸
ارسال‌ها
پاسخ
Programmer آفلاین
كاربر دو ستاره
**

ارسال‌ها: 79
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 2
( 23 تشکر در 9 ارسال )
ارسال: #3
Cool  RE: متخصص هاي  VC جواب بدند
به نام خدا  :smile:
با عرض سلام خدمت شما دوست عزیز
فکر میکنم سواله جالبیه اینو برای استفاده همه جواب میدهم
ابتدا متن زیر را به انتهای StdAfx.h اضافه کنید.

کد:
#include <atlimage.h>
#include <GdiplusImaging.h>

using namespace ATL;
using namespace Gdiplus;
بعد یک تصویر با عنوان IDB_BITMAP به صورت Resource تعریف کنید.
سپس مت توانید از دستوری مشابه زیر در برنامهء خود استفاده کنید:
کد:
CImage img;
img.LoadFromResource(AfxGetResourceHandle(), IDB_BITMAP);
img.Save(L"C:\\X.jpg", ImageFormatJPEG);

امید وارم مفید بوده باشد
سعید.ت  Cool
(آخرین ویرایش در این ارسال: ۲۶-مرداد-۱۳۸۵, ۲۲:۵۹:۵۴، توسط Programmer.)
۲۶-مرداد-۱۳۸۵, ۲۲:۵۲:۱۷
وب سایت ارسال‌ها
پاسخ
pswin آفلاین
كاربر دو ستاره
**

ارسال‌ها: 151
موضوع‌ها: 11
تاریخ عضویت: مرداد ۱۳۸۵

تشکرها : 0
( 19 تشکر در 11 ارسال )
ارسال: #4
RE: متخصص هاي  VC جواب بدند
سلام
یه روش دیگه اینه که میتونی ریسورس رو بخونی روی بافر بریزی و بعد داخل یه فایل با فرمت BMP ذخیره کنی . اما بهترین روش همون روشی هست که Programmer اشاره کرده

۲۷-مرداد-۱۳۸۵, ۰۰:۱۷:۲۴
وب سایت ارسال‌ها
پاسخ
Programmer آفلاین
كاربر دو ستاره
**

ارسال‌ها: 79
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 2
( 23 تشکر در 9 ارسال )
ارسال: #5
RE: متخصص هاي&nbsp;&nbsp;VC جواب بدند
بله!

در ضمن برای کاری که pswin اشاره کرد یه تابع خفن نوشتم ببینید:

کد:
PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp)
{
    BITMAP bmp;
    WORD cClrBits;
    PBITMAPINFO pbmi;

    if(!GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp))
        return NULL;

    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);

    if(cClrBits == 1)
        cClrBits = 1;
    else if(cClrBits <= 4)
        cClrBits = 4;
    else if(cClrBits <= 8)
        cClrBits = 8;
    else if(cClrBits <= 16)
        cClrBits = 16;
    else if(cClrBits <= 24)
        cClrBits = 24;
    else cClrBits = 32;

    if(cClrBits != 24)
        pbmi = (PBITMAPINFO)LocalAlloc(LPTR, sizeof(BITMAPV5HEADER) + sizeof(RGBQUAD) * (1 << cClrBits));
    else
        pbmi = (PBITMAPINFO)LocalAlloc(LPTR, sizeof(BITMAPV5HEADER));

    ZeroMemory(&pbmi, sizeof(pbmi));

    if(cClrBits < 24)
        pbmi->bmiHeader.biClrUsed = (1 << cClrBits);

    pbmi->bmiHeader.biClrImportant = 0;
    pbmi->bmiHeader.biWidth = bmp.bmWidth;
    pbmi->bmiHeader.biPlanes = bmp.bmPlanes;
    pbmi->bmiHeader.biCompression = BI_RGB;//BI_JPEG;
    pbmi->bmiHeader.biHeight = bmp.bmHeight;
    pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;
    pbmi->bmiHeader.biSize = sizeof(BITMAPV5HEADER);
    pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits + 31)& ~31) / 8 * pbmi->bmiHeader.biHeight;

    return pbmi;
}

VOID CreateBMPFile(LPTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC)
{
    DWORD cb;
    BYTE *hp;
    HANDLE hf;
    DWORD dwTmp;
    DWORD dwTotal;
    LPBYTE lpBits;
    PBITMAPV5HEADER pbih;
    BITMAPFILEHEADER hdr;

    pbih = (PBITMAPV5HEADER)pbi;
    //pbih->bV5Compression = BI_JPEG;
    lpBits = (LPBYTE)GlobalAlloc(GMEM_FIXED, pbih->bV5SizeImage);

    if(!GetDIBits(hDC, hBMP, 0, (WORD)pbih->bV5Height, lpBits, pbi, DIB_RGB_COLORS))
    {
        CHAR szBuf[80];
        DWORD dw = GetLastError();
        sprintf(szBuf, "Save bitmap failed: GetLastError returned %u\n", dw);
        MessageBox(NULL, szBuf, "Error", MB_OK);
    }

    hf = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE,
        (DWORD)NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, (HANDLE)NULL);

    if(hf == INVALID_HANDLE_VALUE)
        Show("3 Error when create bitmap fiile");

    hdr.bfType = 0x4d42;
    hdr.bfReserved1 = 0;
    hdr.bfReserved2 = 0;
    hdr.bfSize = (DWORD)(sizeof(BITMAPFILEHEADER) +
        pbih->bV5Size + pbih->bV5ClrUsed * sizeof(RGBQUAD) + pbih->bV5SizeImage);

    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->bV5Size + pbih->bV5ClrUsed * sizeof(RGBQUAD);

    if(!WriteFile(hf, (LPVOID)&hdr, sizeof(BITMAPFILEHEADER), (LPDWORD)&dwTmp,  NULL))
       Show("4 Error when create bitmap fiile");

    if(!WriteFile(hf, (LPVOID)pbih, sizeof(BITMAPV5HEADER) +
            pbih->bV5ClrUsed * sizeof(RGBQUAD), (DWORD*)&dwTmp, 0))
        Show("5 Error when create bitmap fiile");

    hp = lpBits;
    dwTotal = cb = pbih->bV5SizeImage;

    if(!WriteFile(hf, (LPSTR)hp, (int)cb, (LPDWORD)&dwTmp, NULL))
        Show("6 if(!WriteFile(hf, (LPSTR)hp, (int) cb, (LPDWORD)&dwTmp, NULL)) ");

     if(!CloseHandle(hf))
        Show("7 CloseHandle");

     GlobalFree((HGLOBAL)lpBits);
}

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

کد:
HDC l_hdcScreen = CreateDC("DISPLAY", NULL, NULL, NULL),
l_hdcCompatible = CreateCompatibleDC(l_hdcScreen);
INT l_intWidth = GetDeviceCaps(l_hdcScreen, HORZRES),
l_intHeight = GetDeviceCaps(l_hdcScreen, VERTRES);
HBITMAP l_hbmScreen = CreateCompatibleBitmap(l_hdcScreen, l_intWidth, l_intHeight);
SelectObject(l_hdcCompatible, l_hbmScreen);
BitBlt(l_hdcCompatible, 0, 0, l_intWidth, l_intHeight, l_hdcScreen, 0, 0, SRCCOPY);
CHAR szBuf[80];
sprintf(szBuf, "E:\\Images\\_%u_.bmp", GetTickCount());
CreateBMPFile(szBuf, CreateBitmapInfoStruct(l_hbmScreen), l_hbmScreen, l_hdcCompatible);

سعید ت Cool
۲۷-مرداد-۱۳۸۵, ۰۲:۲۷:۳۴
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  طراحي اگوريتم (ضرب اعداد بزرگ) جواب ميخوام arazinqizi 4 8,706 ۰۳-آذر-۱۳۹۱, ۱۷:۰۸:۲۱
آخرین ارسال: akramn
  طراحي الگوريتم(تقسيم و غلبه) جواب مي خوام arazinqizi 1 3,686 ۱۲-آذر-۱۳۸۹, ۱۹:۲۳:۴۵
آخرین ارسال: onlystar

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS