Avatar billede the_fox Nybegynder
05. september 2006 - 14:08 Der er 8 kommentarer og
1 løsning

Vise .jpg billede i et vindue?

Hej Eksperter!

Jeg har fundet nogle eksempler på hvordan hvordan man viser et bitmap billede, men det fylder sgu for meget.

Derfor vil jeg gerne bruge jpg eller png eller hvad der nu er nemmest.

Derudover er jeg også lidt i tvivl om hvordan jeg inkluderer billedet som en ressource i .exe -filen.

er der nogle som har et godt forslag? Gerne med et eksempel.

Mvh Ole
Avatar billede segmose Nybegynder
05. september 2006 - 14:41 #1
Hvilken C++ har du gang i?

prøv at se på LoadFromFile om den kan klare jpg eller png.
Avatar billede bertelbrander Novice
05. september 2006 - 19:47 #2
Prøv at kikke på JDraw:
http://damb.dk/graphics.php

Den kan vise .jpg billeder. Der burde være let at få den til at læse fra en resource.
Avatar billede the_fox Nybegynder
06. september 2006 - 15:03 #3
Hmm ok! Jeg dropper det med jpg, det er vist for bøvlet for mig og holder mig i stedet til bmp.
Derimod vil jeg gerne have et hint til hvordan jeg bruger bmp-billedet som ressource, så det ikke skal ligge ved siden af .exe-filen.

jeg har inkluderer sample.bmp herunder i min rc-fil
1028 10 MOVEABLE PURE "E:\\6 - Programmering\\C++\\sample.bmp"

og bruger følgende i main fil:

HBITMAP LoadBMP(const char *FileName, UINT *Width, UINT *Height)
{
  HBITMAP BitMap = (HBITMAP )LoadImage(0, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  if(!BitMap)
    MessageBox(0, "Failed to load image", "BitMap", MB_OK);
  else
  {
    BITMAP BitmapInfo;
    GetObject(BitMap, sizeof(BITMAP), &BitmapInfo);
    *Width = BitmapInfo.bmWidth;
    *Height = BitmapInfo.bmHeight;
  }
  return BitMap;
}

void OnPaint(HWND hwnd)
{
  PAINTSTRUCT PaintStruct;
  HDC dc = BeginPaint(hwnd, &PaintStruct);
  HDC MemDC = CreateCompatibleDC(dc);
  HBITMAP OldBitmap = (HBITMAP )SelectObject(MemDC, Bitmap);
  BitBlt(dc, 0, 0, ImageWidth, ImageHeight, MemDC, 0, 0, SRCCOPY);
  SelectObject(MemDC, OldBitmap);
  DeleteObject(MemDC);
  EndPaint(hwnd, &PaintStruct);
}
Avatar billede the_fox Nybegynder
06. september 2006 - 15:09 #4
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nCmdShow)
{
    //Bitmap = LoadBMP("sample.bmp", &ImageWidth, &ImageHeight);
    Bitmap = LoadBMP("sample.bmp", &ImageWidth, &ImageHeight);

    return DialogBox(hInstance, MAKEINTRESOURCE(IDD_MAIN), NULL, DlgProc);
}
Avatar billede bertelbrander Novice
06. september 2006 - 20:10 #5
BitMap = (HBITMAP )LoadImage(InstanceHandle, MAKEINTRESOURCE(1028),
IMAGE_BITMAP, 0, 0, 0);

InstanceHandle er hInstance fra WinMain

1028 er det samme 1028 som du har i .rc filen.
Avatar billede the_fox Nybegynder
07. september 2006 - 10:11 #6
Hmm den vil ikke godkende MAKEINTRESOURCE(1028) som bitmap.

HBITMAP LoadBMP(HINSTANCE hInstance, UINT *Width, UINT *Height)
{
  //HBITMAP BitMap = (HBITMAP )LoadImage(0, "sample.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
  HBITMAP BitMap = (HBITMAP )LoadImage(hInstance, MAKEINTRESOURCE(1028), IMAGE_BITMAP, 0, 0, 0);
  if(!BitMap)
    MessageBox(0, "Failed to load image", "BitMap", MB_OK);
  else
  {
    BITMAP BitmapInfo;
    GetObject(BitMap, sizeof(BITMAP), &BitmapInfo);
    *Width = BitmapInfo.bmWidth;
    *Height = BitmapInfo.bmHeight;
  }
  return BitMap;
}

Den falder i, i if(!BitMap) så jeg ved ikke lige hvor det går galt.

Jeg har tjekket stien i rc-filen og den er ok.

har du et forslag?
Avatar billede bertelbrander Novice
07. september 2006 - 19:42 #7
Prøv at skrive dette i din .rc fil:

1028 BITMAP MOVEABLE PURE "sample.bmp"

DVS BITMAP i stedet for 10, 10 er vist for rå data.
Avatar billede the_fox Nybegynder
08. september 2006 - 11:12 #8
Jamen det var jo lige det der skulle til. Mange tak for hjælpen!
Avatar billede the_fox Nybegynder
11. september 2006 - 12:34 #9
Jeg lukker og slukker...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester