Toon posts:

[QBASIC] BMP Loader -> verkeerde kleuren.

Pagina: 1
Acties:
  • 101 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Ik ben bezig met een programmatje dat plaatjes op mijn scherm moet laten zien.
Dit doe ik voor een statestieken programma dat op mijn laptop draait.

Waar heb je de BMPLoader vandaan?
http://www.geocities.com/crossleo2020/Qbgfx.htm en dan kiezen voor de 16 kleuren versie.

Ik heb ook al de BMPLoader geprobeerd van QBasic.com, maar deze werkt niet, ook heb ik op internet gezocht naar andere BMPLoaders die werken, maar geen van alle doen wat ik wil.
Ik wil een BMP kunnen laden, maar meestal kan ik de positie niet bepalen waardat hij moet komen.

Waarom BMP en niet GIF?
Ik heb ook al de GIF Loader van QBasic.com gebruikt, hier kan ik niet bepalen waar hij moet komen staan, deze werkt wel mooi.

Pluspunten:
- 256 kleuren(dus gewoon de gif op goed formaat, geen verkleuringen).

Minpunten:
- Niet te bepalen waar het staat
- Veranderd de paletten, dus ik zou nooit b.v. een plaatje kunnen laden dat 256 roodtinten heeft en een met 256 blauwtinten.

De fout:
De BMP Loader die doet het met sommige plaatjes wel, en sommige niet, dit is erg vreemd.

Als ik een plaatje met de kleuren GEEL, ZWART, WIT, BLAUW met de omvang van 45x42 pixels en opgeslagen als 16 kleuren, dan krijg ik dit(links qbasic, rechts mspaint).
Afbeeldingslocatie: http://zooi.kingofdos.com/got/qbasic-bitmap-fout.jpg

Als ik dan een plaatje pak met de kleuren PAARS, BLAUW, LICHTBLAUW, GROEN, GEEL, ROOD, GRIJS, WIT, ZWART en een omvang van 11x41 pixels dan doet hij het wel goed.
Afbeeldingslocatie: http://zooi.kingofdos.com/got/qbasic-bitmap-goed.jpg

[EDIT]
Ik zie trouwens dat het met het 2e plaatje ook niet goed gaat, daar zijn wat kleuren omgedraait, DUS het hele scriptje werkt niet
[/EDIT]

Wat is er nou zo verschillend aan deze plaatjes? De een heeft meer kleuren dan de andere, vedder de pixels zijn anders, maar allebij 16 kleuren.

Ik heb ook de 256 versie getest, deze doet ook _vaag_, schuine strepen door de BMP's heen. Dit doet de versie(16+256) van QBasic.com ook met mn plaatjes. Erg vreemd dus.

Wat heb ik gedaan?
Nou omdat het niet echt werkte wat ik allemaal wou heb ik zelf een systeem geschreven, dit werkt niet via een binary file maar via een textfile, deze textfile heeft een opbouw die ik via een scriptje wel goed kan inlezen.
code:
1
2
3
4
5
4,4
QGHW
GTTG
QHGT
TGHQ

Ik lees dit bestand in, eerste regel-> aantal pixels groot, volgende regels->kleuren
De kleuren lees ik in via een left+right zodat ik iedere keer 1 letter terugkrijg, dan via PSET maak ik van Q zwart(0), W blauw(1), T rood(4), G geel(14), H wit(15). Dit omdat ik gewoon de toetsen op het toetsenbord volg van Q(0) naar H(15).

Alleen dit werkt zo moeilijk, van BMP naar ICA(zo noem ik het formaat) moet je met de hand doen, makkelijk :/

De vraag:
Hoe kan ik op een goed werkende manier, 16 kleuren plaatjes inladen, het formaat maakt niet zoveel uit, ik ben dus niet aan BMP files gebonden. Zolang de plaatjes dus maar gemaakt kunnen worden via PHP (en omweg mogelijk).

[EDIT2]
Als ik een plaatje maak en de kleuren omdraai, dus geel wordt lichtblauw, dan laat hij ze WEL goed zien, maar wat doe ik daar tegen? Ik heb geen zin om 30 plaatjes per pixel om te gaan berekenen
[/EDIT2]

[ Voor 8% gewijzigd door Verwijderd op 08-08-2003 16:38 ]


  • jurri@n
  • Registratie: Maart 2000
  • Laatst online: 21-08 12:49
Het zijn maar 2 regels die de pixels op het scherm zetten. Misschien kun je een array maken met kleuren, en die in die regels gebuiken? je hoeft maar 16 kleuren op te geven :)

Tip: het progje staat standaard op SCREEN 13. Als je hier SCREEN 9 van maakt, heb je een hogere resolutie :)

[ Voor 25% gewijzigd door jurri@n op 08-08-2003 17:46 ]


  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09-2025

BdR

TV is gooder then books

Blijkbaar gaat er iets mis met het inlezen van de palette. Als ik zie die code bekijk (16cbmp.bas), is het iig opvallend dat er met de ingelezen kleuren-palette (thecolors$) niets gedaan wordt :? ik denk dat je zelf nog code moet schrijven waarmee de palette gewijzigd wordt ahv die string. Doe bijv. es een "Print" van die string om te zien wat erin zit na het laden van een .BMP

als je overschakeld naar SCREEN 13 dan staat de palette op 1 of andere VGA standaard ingesteld. Deze wijkt blijkbaar af van de standaard BMP palette. Maar nogmaals, de oplossing zit in die thecolors$ denk ik.

edit: bij naderinzien.. het volgende is specifiek voor windows
en op deze pagina met info over het BMP fileformat staat iets over reseved colours, misschien heb je daar wat aan.

[ Voor 18% gewijzigd door BdR op 08-08-2003 20:51 ]

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Verwijderd

Kijk es goed naar dat regenboogplaatje en dat zon-plaatje... de kleuren worden bij allebei de plaatjes precies hetzelfde veranderd...

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09-2025

BdR

TV is gooder then books

dat er de palette inderdaad in die TheColors$ staat, kan je zien als je deze code toevoegd. Die print de rood/groen/blauw waarden op het scherm.
code:
1
2
3
4
5
6
7
8
9
10
11
12
TheColors$ = INPUT$(table&(3) - 54, #1) 'Read in pallette info
'DIM PalArray(0 TO 128) AS LONG
FOR i = 1 TO 16
  Red = ASC(MID$(TheColors$, 1, 1))
  Green = ASC(MID$(TheColors$, 2, 1))
  Blue = ASC(MID$(TheColors$, 3, 1))
  TheColors$ = RIGHT$(TheColors$, (LEN(TheColors$) - 1) - 3)
  PRINT red, green, Blue
  'PalArray(i) = (65536 * Red) + (256 * Green) + Blue
NEXT
'PALETTE USING PalArray(1)
GOTO lucky 'ff stoppen om te zien wat op beeld staat

maar hoe je mbv PALETTE de VGA palette zou moeten wijzigen is me een raadsel. De qb-help is ook al vrij onduidelijk op dit punt..

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider


Verwijderd

BdR schreef op 08 augustus 2003 @ 21:31:
[..]
maar hoe je mbv PALETTE de VGA palette zou moeten wijzigen is me een raadsel. De qb-help is ook al vrij onduidelijk op dit punt..
code:
1
PALETTE kleurNum, (65536 * Red) + (256 * Green) + Blue

:)

[disclaimer]
Tenminste, dat is wat ik me herinner van mijn qbasic tijdperk, wat natuurlijk al ver achter mij ligt enzo :P
[/disclaimer]

[ Voor 19% gewijzigd door Verwijderd op 08-08-2003 23:09 ]


  • Falco00
  • Registratie: Juli 2002
  • Laatst online: 23-07 00:27

Falco00

(Busy)

Leuk die BMP'tjes, ik ben toevallig net bezig in c++ en wat 3D spul (OpenGL) en ik kwam 2 probleempjes tegen bij het laden van bmp bestanden.

De kleuren in BMP's worden opgeslagen in BGR order, dus blauw groen rood, dit is ook te zien in die plaatjes van jou.
Het tweede probleem wat ik tegenkwam is dat het plaatje ondersteboven opgeslagen wordt, maar zo te zien heb jij daar geen problemen mee.

You fish on your side, I'll fish on my side, nobody fish in the middle


Verwijderd

Topicstarter
Falco00 schreef op 08 augustus 2003 @ 23:24:
Leuk die BMP'tjes, ik ben toevallig net bezig in c++ en wat 3D spul (OpenGL) en ik kwam 2 probleempjes tegen bij het laden van bmp bestanden.

De kleuren in BMP's worden opgeslagen in BGR order, dus blauw groen rood, dit is ook te zien in die plaatjes van jou.
Het tweede probleem wat ik tegenkwam is dat het plaatje ondersteboven opgeslagen wordt, maar zo te zien heb jij daar geen problemen mee.
Ne dat scriptje tekent eerst de 1e regel gewoon onderaan en dan een lijn naar boven, etc.

Ik zal morgen(vandaag eigenlijk al) even gaan uitwerken met de info die ik hier heb, mischien lukt het wel.
Overigens, de pixelkleur wordt bepaald tot 256 kleuren, omdat anders de paintkleuren niet overkomen, dus ik krijg 256 kleuren, SCREEN 12 (640x480, 16 kleuren) heeft maar 16 kleuren, dus geen 256, daar zit het hem denk ik zou in. Keuren oppakken en als het b.v. 231 is dat ik er 4 van maak, rood omgezet. Toch?

  • BdR
  • Registratie: Juni 2001
  • Laatst online: 03-09-2025

BdR

TV is gooder then books

Verwijderd schreef op 09 augustus 2003 @ 02:02:
Overigens, de pixelkleur wordt bepaald tot 256 kleuren, omdat anders de paintkleuren niet overkomen, dus ik krijg 256 kleuren, SCREEN 12 (640x480, 16 kleuren) heeft maar 16 kleuren, dus geen 256, daar zit het hem denk ik zou in. Keuren oppakken en als het b.v. 231 is dat ik er 4 van maak, rood omgezet. Toch?
kleur 231 kan elke willekeurige kleur zijn, waarom rood en niet licht-blauw/groen? de rood/groen/blauw waarde per kleur index staat dus opgeslagen in de palette-info van de BMP. Die moet je zien uit te lezen en aan de hand daarvan de VGA palette instellen.

En als je met SCREEN 12 werkt lijkt het me logischer om in je programma alleen 16 kleuren BMP's accepteren, ipv een hele kleur omzet routine in te bouwen.

kijk anders ook ff hiernaar bijvoorbeeld "BMP Loader 0.5"

[ Voor 8% gewijzigd door BdR op 09-08-2003 11:09 ]

mijn web games -> Impossible Snake 2 :: Impossible Snake :: Snake Slider

Pagina: 1