Avatar billede tax Nybegynder
22. oktober 2001 - 12:34 Der er 16 kommentarer og
1 løsning

Bitmap farver i vc++

Vi har lavet et program, der indsætter et bitmap i vores clientarea. Problemet er blot det at vores clientarea (hdc), kun opererer i 16 farver. Hvordan opsættes hdc, til at kunne tage 16 eller 32 bits farvedybde?
Avatar billede jpk Nybegynder
22. oktober 2001 - 12:36 #1
Jeg er ikke helt med, Hvorfor bruger i kun 16 farver???
Avatar billede tax Nybegynder
22. oktober 2001 - 12:38 #2
Det er default. Åbenbart

Det kan være at vores StrechBlt skærer ned til 16 farver.
Avatar billede jpk Nybegynder
22. oktober 2001 - 12:43 #3
Nej, det er ikke default og StrechBlt ændre ikke på farvedybden!

Prøv at poste jeres kode til at loade og tegne bitmappen.
Avatar billede tax Nybegynder
22. oktober 2001 - 12:45 #4
Jeg tror det er fordi at vi har copy-pastet filen ind i vores resource editor, og den kan vist nok kun anvende 16 farver.

Hvad er den rigtige måde at hente et billede fra en fil på???
(.bmp)
Avatar billede jpk Nybegynder
22. oktober 2001 - 12:49 #5
Vieweren ændrer ganske rigtigt farvedybden hvis man bruger copy/paste...
Vælg istedet Insert->Resource (Ctrl+R) og vælg bitmap.
Klik så <Import> og vælg filen!
Avatar billede tax Nybegynder
22. oktober 2001 - 13:20 #6
It worx. Nu laver strechblt blot billedet lidt gnidret. Er der en workaround eller er det sådan det bare er?
Avatar billede jpk Nybegynder
22. oktober 2001 - 13:26 #7
Hvis farverne ikke passer helt, kan det være du for brug for en palette (CPalette i MFC), der mappe farver i bitmappen til farvedybden på skærmen. Dette bør man normalt anvende, medmindre man er sikker på, at bitmappen har samme farvedybde som desktoppen (hvis programmet altså kører i et vindue).

Billedet kan blive gnidret hvis du ændrer for meget på størrelsen, fx et 100x100px bitmap vises over et areal på 300x300px...
Avatar billede tax Nybegynder
22. oktober 2001 - 13:31 #8
Vi har et 800*600 bitmap i hukommelsen. Dette tegner vi i. Så StrechBlt\'ter vi det ind i clientvinduet.
Hvis dimensionerne asf clientvinduet ikke er lige omkring de 800*600. F.eks 100*100, ser billedet meget gnidret og farvereduceret ud.
Avatar billede jpk Nybegynder
22. oktober 2001 - 13:46 #9
Er der nogen speciel grund til at jeres bitmap ikke har samme dimension som clientvinduets client area?
Avatar billede tax Nybegynder
22. oktober 2001 - 13:51 #10
ja, brugeren kan jo lave om på størrelsen af sit vindue. Vi anvender ikke noget specielt koordinatsystem i clientvinduet.
Avatar billede jpk Nybegynder
22. oktober 2001 - 13:56 #11
Okay, så det er en masse mindre bitmaps i tegner og i vil altid have, at det færdige billede fylder hele skærmen?
Avatar billede jpk Nybegynder
22. oktober 2001 - 18:22 #12
Ang billedkvaliteten så prøv at kalde SetStretchBltMode(HALFTONE) for at se om det ikke glatter billedet fint ud!

Metoden findes også på class CDC hvis det altså er MFC i arbejder med...
Avatar billede tax Nybegynder
22. oktober 2001 - 18:29 #13
Det er det. Tak for hjælpen. Nu har du efterhånden reddet os et par gange.
Avatar billede tax Nybegynder
23. oktober 2001 - 07:54 #14
jpk:

Jeg har lige kompileret med HALFTONE, det er bare NICE!!! Thanx! :)))
Avatar billede jpk Nybegynder
23. oktober 2001 - 09:23 #15
Det var så lidt...
Avatar billede soepro Nybegynder
24. oktober 2001 - 08:28 #16
jpk >> godt gået ! Det er rigtig interessant at være med på sidelinien, når man ellers til daglig kun bruger de mere \"almindelige\" funktioner i C++.
Avatar billede jpk Nybegynder
24. oktober 2001 - 08:50 #17
=> soepro
Takker mange gange, men jeg husker da at du selv har suppleret med kompetente svar mange gange...
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