Bilder Drucken MFC

Moin,

nun hab ich doch einen Ausdruck auf einen Drucker zu machen.
Texte sind ja kein Problem dabei. Nun brauch ich aber ein Bild.
Ums einfach zu halten erstmal ein BMP. Und das natürlich von einem
logo.bmp file.

Bisher hab ich getan :

HRSRC m\_hBitmap ;
m\_hBitmap = (HRSRC)::LoadImage(0,\_T("logo.bmp"),IMAGE\_BITMAP,0,0,LR\_LOADFROMFILE);
HGLOBAL hMem = LoadResource(AfxGetResourceHandle(),(HRSRC) m\_hBitmap);
LPBITMAPINFOHEADER lpbi = (LPBITMAPINFOHEADER)LockResource(hMem);
COLORREF FAR\* lprgb;
lprgb = (COLORREF FAR\*)((LPBYTE)lpbi + (int)lpbi-\>biSize);
LPSTR lpb;
unsigned iMaxColors = 1 biBitCount;
lpb = (LPSTR)(lpbi + 1);
lpb += iMaxColors \* sizeof(RGBQUAD);
StretchDIBits(pDC-\>m\_hDC, recAuswert.left+200, recAuswert.top, BitmapParam.bmWidth+1, BitmapParam.bmHeight+1,BitmapParam.bmWidth, 0, BitmapParam.bmWidth, BitmapParam.bmHeight, lpb,(LPBITMAPINFO)lpbi, DIB\_RGB\_COLORS, SRCCOPY); 

allerdings meldet er Fehler bei

lprgb = (COLORREF FAR\*)((LPBYTE)lpbi + (int)lpbi-\>biSize);

Ich will doch nur eine Bild auch Ausdrucken auf einen Drucker :frowning:

Hilft mir .

HRSRC m_hBitmap ;
m_hBitmap =
(HRSRC)::LoadImage(0,_T(„logo.bmp“),IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
HGLOBAL hMem = LoadResource(AfxGetResourceHandle(),(HRSRC)
m_hBitmap);
LPBITMAPINFOHEADER lpbi =
(LPBITMAPINFOHEADER)LockResource(hMem);
COLORREF FAR* lprgb;
lprgb = (COLORREF FAR*)((LPBYTE)lpbi + (int)lpbi->biSize);
LPSTR lpb;
unsigned iMaxColors = 1 biBitCount;
lpb = (LPSTR)(lpbi + 1);
lpb += iMaxColors * sizeof(RGBQUAD);
StretchDIBits(pDC->m_hDC, recAuswert.left+200,
recAuswert.top, BitmapParam.bmWidth+1,
BitmapParam.bmHeight+1,BitmapParam.bmWidth, 0,
BitmapParam.bmWidth, BitmapParam.bmHeight,
lpb,(LPBITMAPINFO)lpbi, DIB_RGB_COLORS, SRCCOPY);

allerdings meldet er Fehler bei

lprgb = (COLORREF FAR*)((LPBYTE)lpbi + (int)lpbi->biSize);

Ich will doch nur eine Bild auch Ausdrucken auf einen Drucker

-(

Hilft mir .

hallo RakonDark!

Ich kenne mich mit MFC leider nicht so aus (mit API wuerde ich gleich damit abfahren…).
Mir faellt bei deinem Code aber auf, dass Du nirgends einen HDC kriegst (Handle auf einen DeviceContext). Den brauchst Du bei WIN aber immer. Bei der MFC gibt es spezielle HDC-Objekte dafür, so eines muss wohl her.

Wenn Du aber für Text schon einen DC hast, solltest Du was immer darauf zeichnen können: Bitmaps API-maessig mit StretchBlt(), BitBlt(), oder Linien darauf zeichnen mit einem CPen-Objekt, oder was das Herz begehrt.
Einen DC muss man haben.

lg
Martin

Einen DC muss man haben.

Hab ich hab ich pDC->m_hDC :smile:

es geht auch eher darum die farbpalette richtig zu erzeugen

lg
Martin

Hallo,

is zwar schon ewig her, aber ich habe hier mal ein Schnippel Code gefunden, der eine Bitmap aus einer Datei liest, vieleicht hilft dir das weiter…

if (sizeof(BITMAPINFOHEADER) != _lread (hFile, (LPSTR)lpbi, sizeof(BITMAPINFOHEADER)))
goto ErrExit;

// Check to see that it’s a Windows DIB – an OS/2 DIB would cause
// strange problems with the rest of the DIB API since the fields
// in the header are different and the color table entries are
// smaller.
//
// If it’s not a Windows DIB (e.g. if biSize is wrong), return NULL.

if (lpbi->biSize == sizeof(BITMAPCOREHEADER))
goto ErrExit;

// Now determine the size of the color table and read it. Since the
// bitmap bits are offset in the file by bfOffBits, we need to do some
// special processing here to make sure the bits directly follow
// the color table (because that’s the format we are susposed to pass
// back)

if (!(nNumColors = (UINT)lpbi->biClrUsed))
{
// no color table for 24-bit, default size otherwise
if (lpbi->biBitCount != 24)
nNumColors = 1 biBitCount; /* standard size table */
}

// fill in some default values if they are zero
if (lpbi->biClrUsed == 0)
lpbi->biClrUsed = nNumColors;

if (lpbi->biSizeImage == 0)
{
lpbi->biSizeImage = ((((lpbi->biWidth * (DWORD)lpbi->biBitCount) + 31) & ~31) >> 3)
* lpbi->biHeight;
}

// get a proper-sized buffer for header, color table and bits
GlobalUnlock(hDIB);
hDIBtmp = GlobalReAlloc(hDIB, lpbi->biSize +
nNumColors * sizeof(RGBQUAD) +
lpbi->biSizeImage, 0);

if (!hDIBtmp) // can’t resize buffer for loading
goto ErrExitNoUnlock; //MPB
else
hDIB = hDIBtmp;

lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);

// read the color table
_lread (hFile, (LPSTR)(lpbi) + lpbi->biSize, nNumColors * sizeof(RGBQUAD));

// offset to the bits from start of DIB header
offBits = lpbi->biSize + nNumColors * sizeof(RGBQUAD);

// If the bfOffBits field is non-zero, then the bits might *not* be
// directly following the color table in the file. Use the value in
// bfOffBits to seek the bits.

if (bmfHeader.bfOffBits != 0L)
_llseek(hFile, bmfHeader.bfOffBits, SEEK_SET);

if (MyRead(hFile, (LPSTR)lpbi + offBits, lpbi->biSizeImage))
goto OKExit;

==================================================================
Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]