Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

HDC -> BMP

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

RE: HDC -> BMP

Autor: RSTEIN

9:31:53 17.04.2009

Dobry den,
Ad a) Horni lista je okno, jehoz class je HHTASKBAR. Takze muzete zjistit rozmery (RECT) okna takto:

RECT taskbarRect;
HWND hWndtaskbar = ::FindWindow( _T( "HHTaskBar" ), NULL );
GetWindowRect(hWndtaskbar, & taskbarRect) );


Ad b) Ke spusteni BT muzete pouzit API funkci BthSetMode. Pamatujte ale, ze toto plati pro BT Stack od Microsoftu, ktery je dnes v zarizenich pritomen nejcasteji, ale napr. zarizeni s Widcomm BT stackem museji pouzivat API Widcommu.

DWORD currMode = BTH_CONNECTABLE ; //nebo BTH_POWER_OFF - vypnuto, BTH_DISCOVERABLE - zapnuto, zarizeni ve "viditelnem" rezimu
BthSetMode(&currMode);

Rene Stein
Senior Software Architect
.Net Development, Mobile Development - managed(business applications)/native (drivers, services/navigation software)
http://blog.renestein.net


Příspěvek zaslán emailem

Citovat příspěvek

 

Re: HDC -> BMP

Autor: XYzacatecnik

12:35:32 16.04.2009

Dobry den,
diky za odpoved. Zvolil jsem prvni variantu. V pripade ukladani do bitmapy je z patricneho menu povoleno nacist kontext zarizeni do bmp a az pote je volan filedialog.
Chtel bych se zeptat jeste na tyto zalezitosti:
a) jak muzu zjistit vysku systemoveho menu/nabidky (te nahore ve WM, s nabidkou start, s hodinami apod.)
b) zda existuje nejake jednoducha fce, pomoci ktere mohu aktivovat ovladac bluetooth (zkousel jsem hledat, ale marne).
Predem dekuji za pripadnou odpoved.

Citovat příspěvek

 

RE: HDC -> BMP

Autor: RSTEIN

10:11:09 15.04.2009

Dobry den,
Nevim, zda presne rozumim tomu, co chcete, kod nevidim, ale tipnul bych si, ze by pro vas bylo nejlepsi bitmapu sejmout a teprve pote se ptat, kam bue ulozena.

Jinak samozrejme plati, ze si muzete (pomerne drsnym zpusobem) vynutit prekresleni okna, ale pokud vas dialog prekryva i jina okna, musite volat API funkci RedrawWindow pro vsechna prekryta okna.

RedrawWindow(childHwnd, IntPtr.Zero, IntPtr.Zero,
RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN);


Prijemny den
Rene Stein
Senior Software Architect
.Net Development, Mobile Development - managed(business applications)/native (drivers, services/navigation software)
http://blog.renestein.net

Příspěvek zaslán emailem

Citovat příspěvek

 

Re: HDC -> BMP

Autor: XYzacatecnik

0:02:09 15.04.2009

Dobry den,
dekuji za odpoved a za Vami pouzivanou funkci. Chtel bych pozadat o radu jeste s jednou zalezitosti ohledne teto problematiky. Na zacatku vyse uvedene fce Ulozit_dib() volam FileDialog, cekal jsem, ze dialog probehne, ukonci se a z kontextu zarizeni (resp. kreslici plochy aplikace) se vytvori patricna bitmapa, nicmene je to tak, ze bitmapa obsahuje printscreen prave toho FileDialogu, zkousim ruzne ukoncovat dialog, invalidovat, vynucovat prekresleni kontextu, ale neuspesne. Dekuji popr. za radu.

Citovat příspěvek

 

RE: HDC -> BMP

Autor: RSTEIN

14:42:49 06.04.2009

Dobry den,
Vami zaslany kod nemohl nikdy na PDA fungovat.

Zde mate funkci, kterou pouzivam pro ukladani bitmap. Mirne jsem upravil i vas kod (aby doslo alespon k uklidu bitmapy a DC).

void SaveBitmapToFile(LONG lWidth, LONG lHeight, BYTE* pBitmapBits, WORD wBitsPerPixel, LPCTSTR lpszFileName )
{
BITMAPINFOHEADER infoHeader = {0};

infoHeader .biSize = sizeof(BITMAPINFOHEADER);

infoHeader.biWidth = lWidth;

infoHeader.biPlanes = 1;

infoHeader.biBitCount = wBitsPerPixel;

infoHeader.biClrImportant = 0;

infoHeader.biClrUsed = 0;

infoHeader.biCompression = BI_RGB;

infoHeader.biHeight = lHeight;


infoHeader.biSizeImage = lWidth* lHeight * (wBitsPerPixel/8);

BITMAPFILEHEADER fileHeader = {0};

fileHeader.bfType=0x4D42;

fileHeader.bfOffBits = sizeof(BITMAPINFOHEADER) + sizeof(BITMAPFILEHEADER);


fileHeader.bfSize = fileHeader.bfOffBits + infoHeader.biSizeImage;

HANDLE hFile = CreateFile( lpszFileName,GENERIC_WRITE, 0,NULL,

CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,NULL);

if( !hFile )
{
return;
}


DWORD dwWritten = 0;

WriteFile( hFile, &fileHeader, sizeof(fileHeader), &dwWritten , NULL );

WriteFile( hFile, &infoHeader, sizeof(infoHeader), &dwWritten, NULL );

WriteFile( hFile, pBitmapBits, infoHeader.biSizeImage, &dwWritten, NULL );

CloseHandle( hFile );
}



void Ulozit_dib()
{
CString FileName= _T("test.bmp");
WCHAR File[50];
wcscpy(File,FileName);

BITMAPINFO info= {0};
info.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth=100;
info.bmiHeader.biHeight=100;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount=24;

void* ukaz = 0;
HDC pDC = ::GetDC(NULL);
HDC tempDC=CreateCompatibleDC(pDC);
HBITMAP Bmp;
Bmp=CreateDIBSection(pDC,&info,0,&ukaz,NULL,0);

HBITMAP oldBitmap = (HBITMAP) SelectObject(tempDC, Bmp);

BitBlt(tempDC,0,0,100,100,pDC,0,0,SRCCOPY);

BITMAP bitmap = {0};
GetObject(Bmp, sizeof(bitmap), &bitmap);
SaveBitmapToFile(bitmap.bmWidth, bitmap.bmHeight,(byte*)bitmap.bmBits, bitmap.bmBitsPixel, FileName);

SelectObject(tempDC, oldBitmap);
DeleteObject(Bmp);
ReleaseDC(NULL, tempDC);
DeleteDC(tempDC);

::ReleaseDC(NULL, pDC);

}


Prijemny den

Rene Stein
Senior Software Architect
.Net Development, Mobile Development – managed (business applications) / native (drivers, services/navigation software)
Telefon: +420 603 266 732
Mail: rene@renestein.net
ICQ: 162345439
Skype: rene.stein
Web: http://www.renestein.net

Příspěvek zaslán emailem

Citovat příspěvek

 

HDC -> BMP

Autor: zacatecniXY

20:04:13 03.04.2009

Dobry den,
hledam vhodny postup k ulozeni vykreslenych dat z kontextu zarizeni do formatu BMP. Postupoval jsem dle nize uvedeneho kodu, problem je ve funkci GlobalSize, v na ktere se cela metoda WriteDIB behem programu ukonci. Zkousim ruzne postupy, ale moc se nedari. Nevite, jak problem vyresit? Dekuji za pripadnou radu. (eVC 4.00)

BOOL CPoCADView::WriteDIB(LPTSTR szFile, HANDLE hDIB)
{
BITMAPFILEHEADER hdr;
if (!hDIB)
return FALSE;
CFile file;
if( !file.Open( szFile, CFile::modeWrite|CFile::modeCreate) )
return FALSE;
int nColors = 1 << 24;
hdr.bfType = ((WORD) ('M' << 8) | 'B');
hdr.bfSize = GlobalSize (hDIB) + sizeof( hdr );
hdr.bfReserved1 = 0;
hdr.bfReserved2 = 0;
hdr.bfOffBits = (DWORD) (sizeof( hdr ) + 24 +
nColors * sizeof(RGBQUAD));
file.Write( &hdr, sizeof(hdr) );
file.Write(hDIB, GlobalSize(hDIB) );
return TRUE;
}

void CPoCADView::Ulozit_dib()
{
CString FileName="test.bmp";
WCHAR File[50];
wcscpy(File,FileName);

BITMAPINFO info= {0};
info.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
info.bmiHeader.biWidth=100;
info.bmiHeader.biHeight=100;
info.bmiHeader.biPlanes = 1;
info.bmiHeader.biBitCount=24;

VOID *ukaz;

HDC pDC = ::GetDC(NULL);
HDC tempDC=CreateCompatibleDC(pDC);
HBITMAP Bmp;
Bmp=CreateDIBSection(pDC,&info,0,&ukaz,NULL,0);
SelectObject(tempDC,Bmp);
BitBlt(tempDC,0,0,100,100,pDC,0,0,SRCCOPY);
WriteDIB(File,Bmp);
::ReleaseDC(NULL,pDC);
}

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: