ENGLISH VERSION |
|
Links | | | Forum | | | Kommentare | | | News melden |
Chat | | | Umfragen | | | Newsticker | | | Archiv |
amiga-news.de Forum > Programmierung > RGB to 24bit | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
-1- | [ - Beitrag schreiben - ] |
16.03.2010, 18:16 Uhr AGSzabo Posts: 1663 Nutzer |
hi, lang ist her, jetzt programmiere ich wieder. ich möchte drei 32bit werte, welche die farben r, g und b sind, in einen 24bit wert der ordnung %rrggbb umrechnen. wenn ich NICHT runde, kommt es zu verlusten, wenn ich runde, kommt es zu überläufen oder so. ich habe schon einen check eingebaut ob der r, g oder b wert = $ffffffff ist und dann wird nicht gerundet, aber das reicht nicht. was kann man da machen? forumgrüsse, ags code:WG_RGBto24 ; input d1 = RED $00000000 bis $ffffffff ; d2 = GREEN $00000000 bis $ffffffff ; d3 = BLUE $00000000 bis $ffffffff ; output: d0 = $rrggbb pushm d4-d6 moveq #0,d4 move.l d1,d0 move.l #$01010101,d1 moveq #-1,d6 move.l d1,d5 ; runden initialisieren: lsr.l #1,d5 ; divisor / 2 cmp.l d6,d0 beq.b .div_r add.l d5,d0 ; dividend = dividend + (divisor / 2) .div_r bsr _divu32 ; d0.l = d0.l / d1-l move.b d0,d4 lsl.l #8,d4 move.l d2,d0 cmp.l d6,d0 beq.b .div_g add.l d5,d0 .div_g bsr _divu32 move.b d0,d4 lsl.l #8,d4 move.l d3,d0 cmp.l d6,d0 beq.b .div_b add.l d5,d0 .div_b bsr _divu32 move.b d0,d4 move.l d4,d0 popm d4-d6 rts -- Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux [ - Antworten - Zitieren - Direktlink - ] |
16.03.2010, 19:02 Uhr geit Posts: 332 [Ex-Mitglied] |
Hmm, reichte es nicht einfach aus nur die oberen 8 Bits der Komponenten zu nehmen? Nix mit umrechnen oder wandeln. Geit [ - Antworten - Zitieren - Direktlink - ] |
16.03.2010, 19:10 Uhr AGSzabo Posts: 1663 Nutzer |
@geit: kann sein, oder? das ist vieleicht eine gute idee! kann das jemand bestätigen? danke, ags -- Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux [ - Antworten - Zitieren - Direktlink - ] |
16.03.2010, 19:12 Uhr Holger Posts: 8116 Nutzer |
@AGSzabo: Könntest Du den gewünschten Algorithmus in einer anderen Sprache als Assembler, meinetwegen informellem Deutsch, formulieren? -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
16.03.2010, 19:34 Uhr AGSzabo Posts: 1663 Nutzer |
danke holger, danke geit, das problem hat sich gelöst indem ich geits rat befolgt habe:code:--RGB_to_24 moveq #24,d0 lsr.l d0,d1 lsr.l d0,d2 lsr.l d0,d3 moveq #0,d0 move.b d1,d0 lsl.l #8,d0 move.b d2,d0 lsl.l #8,d0 move.b d3,d0 rts Sam mini os4.1 -- e-uae 39bb2 -- A4000D 3.0 - 2mbchip/8mbfast - Ariadne_II - ide DVD und HD -- A500 3.1 (mkick) adide 50mb -- Duron 1200mhz Ubuntu Linux [ Dieser Beitrag wurde von AGSzabo am 16.03.2010 um 19:34 Uhr geändert. ] [ - Antworten - Zitieren - Direktlink - ] |
16.03.2010, 19:35 Uhr Holger Posts: 8116 Nutzer |
Zitat:So wird es meist gemacht, 100% korrekt ist aber es nicht. Der Grund dafür liegt darin, dass nicht 0x100000000 und 0x100 dem maximalen Weiß entsprechen, sondern 0xffffffff und 0xff. Anders gesagt, nur die oberen 8 Bit des 32 Bit Wertes zu verwenden, hieße, einen Faktor von 0x01000000 zu verwenden, während der Faktor eigentlich 0xffffffff/0xff = 0x01010101 ist. Um mal einen Beispielwert zu nennen, bei dem ein Unterschied entsteht: 0xe0000000/0xffffffff entspricht 87,5% 0xe0/0xff entspricht 87,8%, 0xdf/0xff entspricht 87,45%. Hier liegt also der Wert, der durch Verwenden der oberen 8Bit entsteht, weiter vom gewünschten Wert weg als ein anderer 8Bit Wert. 0xe0000000/0x01010101 liefert dagegen den präziseren Wert 0xdf. Allerdings sind die meisten 32Bit-Farbwerte in der Praxis durch einen Prozess entstanden, der mindestens genauso ungenau ist wie die vereinfachte Konvertierung. -- Good coders do not comment. What was hard to write should be hard to read too. [ - Antworten - Zitieren - Direktlink - ] |
-1- | [ - Beitrag schreiben - ] |
amiga-news.de Forum > Programmierung > RGB to 24bit | [ - Suche - Neue Beiträge - Registrieren - Login - ] |
Impressum |
Datenschutzerklärung |
Netiquette |
Werbung |
Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten. |