TBitmap i BitsPerPixel

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

TBitmap i BitsPerPixel

Nowy postprzez banita » środa, 10 grudnia 2008, 17:36

przykladowo mam obraz 24 lub 32bit, chce zrobic a niego skale szarosci. w funkcji przetwarzajacej obraz licze wartosci poszczegulnych pikseli i zamieniam je na skale szarosci. wiadomo ze w skali szarosci kazda skladowa piksela ma taka sama wartosc. w kazdej znanej mi aplikacji obraz po zmianie na skale szarosci jest w formacie 8bit na piksel bo potzrebujemy przechowac tylko jedna wartosc(obojetnie ktorej skladowej).
dlaczego gdy przerobie obraz 24,32bit czy inny na skale szartosci i ustawie PixelFormat na pf8bit to skala szarosci na tym obrazie jest bardzo uboga. gdy obraz pozostaje w formacie 32bit to wyglada jak w kazdej innej aplikacji ale po przerobce na 8bit pokazuje sie "plamy" jednokolorowe bez plynych przejsc miedzy odcieniami szarosci. w jaki sposob moge zamienic ten obraz na 8bit?
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez Cyfrowy Baron » środa, 10 grudnia 2008, 20:37

► patrz serwis: Cyfrowy Baron dział: porady -> grafika

porady:
   Konwersja bitmapy na szarą i monochromatyczną.
   Sprawdzanie głębi bitowej plików graficznych.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez banita » czwartek, 11 grudnia 2008, 00:13

a co w przypadku innych modyfikacji obrazu? przykladowo jakis obraz 8bit i chce zastosowac na nim korekcje gamma czy kontrast...
aby dostac sie do skladowych piksela musze zamienic ten obraz na 32bit, obrobic i na koniec chce spowrotem zbobic z niego obraz 8bit ale po takiej konwersji (z32 do 8) diametralnie pogarsza sie jakosc obrazu (duzo gorsza od wejsciowego obrazu 8bit)

ogolnie chodzi o to:
mam obraz "pics" 8bit i wystarszy taka opercja:

pics->PixelFormat = pf32bit;
pics->PixelFormat =pf8bit;
i juz jakosc tego obrazu jest duzo gorsza od tego wejsciowego 8bit. bez jakichkolwiek operacji, tylko zmiana fomratPixel i przywrucenie oryginalnego. pewno dotyczy to palety kolorow ale nie bardzo wiem jak z tym wygrac
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez Cyfrowy Baron » piątek, 12 grudnia 2008, 14:04

Używając funkcji:

pics->PixelFormat = pf32bit;
pics->PixelFormat =pf8bit;

itp...

dokonujesz prostej konwersji kolorów, program sam dokonuje zmiany wartości poszczególnych pikseli i nie robi tego zbyt efektywnie.

Podałem te porady jako przykład dokonywania konwersji kolorów, jeżeli potrzebujesz dokonać konwersji na inną głębię bitową, to stwórz odpowiedni algorytm wzorując się na poradach.
Przykład zmiany kontrastu znajdziesz w poradzie: Zmiana kontrastu obrazka (Bitmapy).
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez banita » piątek, 12 grudnia 2008, 15:01

jezeli chodzi o same algorytmy obrabiajace obraz to napisalem juz ich kilkanasie, jedyny problem to wlasnie to przejscie z 32bit do nizszych. nic bede kombinowal i moze cos wyjdzie
Avatar użytkownika
banita
Kreacjusz
Kreacjusz
 
Posty: 283
Dołączył(a): poniedziałek, 28 lipca 2008, 20:07
Podziękował : 1
Otrzymał podziękowań: 18
System operacyjny: Windows 7 Professional
Kompilator: C++Builder 2010 Update 5,
Delphi 2010 Update 5,
NetBeans 6.9(MinGw + Qt),
Visual Studio 2008 + Qt
Gadu Gadu: 0
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez jabu74 - ekspert » sobota, 10 stycznia 2009, 15:49

Cześć

Ładujesz kolorowy obrazek 24bit, potem obrabiasz każdy piksel (jego trzy składowe RGB) tak by był w odcieniach szarości czyli taka sama wartość dla składowych RGB poszczególnych pikseli, a na końcu zmieniasz pf32b na pf8bit i widać plamy ? Dobrze zrozumiałem ?
Avatar użytkownika
jabu74 - ekspert
 
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez jabu74 - ekspert » sobota, 10 stycznia 2009, 16:56

Jaki masz algorytm zamieniania RGB na odcień szarości ? Przypuszczam, że sprawdzasz po kolei wartości składowych RGB i wybierasz maksymalną. Proponuję np. średnią arytmetyczną z 3 składowych RGB. Ponieważ zauważ, że dla koloru np. 255.128.64 i 255.255.64 w wersji z maksimum w obydwu przypadkach otrzymasz taki sam kolor 255 natomiast ze średnią arytmetyczną dwa kolory odpowiednio 149 i 191.
Avatar użytkownika
jabu74 - ekspert
 
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez jabu74 - ekspert » środa, 14 stycznia 2009, 20:30

Potwierdzam, że faktycznie jest coś nie tak przy przechodzeniu na pf8bit. Napisałem prostą procedurę zamieniającą kolorowy obrazek na odcienie szarości. Dla przykładu powiedzmy piksel o kolorze np. 0xAAAAAA (po zmianie na odcień szarości) po przejściu na pf8bit nie jest 0xAA !!!
Avatar użytkownika
jabu74 - ekspert
 
    NieznanyNieznana

Re: TBitmap i BitsPerPixel

Nowy postprzez polymorphism » środa, 14 stycznia 2009, 21:14

Proponuję np. średnią arytmetyczną z 3 składowych RGB.

Można jeszcze tak: TeX: gray = 0.299R + 0.587G + 0.114B
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 1 gość