1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Grayscale Image anzeigen lassen..

    • Frage
  • Swoncen
  • 19. Februar 2007 um 13:11
  • Unerledigt
  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 19. Februar 2007 um 13:11
    • #1

    Hallo!

    Ich hab ein Problem, bei dem ich nicht weiter komm. Und zwar möchte ich 8 Bit Bilder (Grauwert) in meinem GUI anzeigen lassen, aber irgendwie ist der Output ganz komisch. Hab schon etliches probiert.. mit 24 Bit funktionierts einwandfrei.. hier codeausschnitte:

    Bitmapinfoheader auslesen und Bild anzeigen (24 Bit)

    Code
    [size=10]LPBITMAPINFO pDIB = m_AviFile.GetDIB(); [COLOR=green]// Infoheader auslesen[/COLOR][/SIZE]
     
    [size=10][size=10]uint8 *pPtr = m_[size=10]Image->GetDataPtr(); [COLOR=green]// Pointer zu den Pixeldaten auslesen[/COLOR][/SIZE]
    [/SIZE]
    [size=10]Bitmap offBmp(pDIB, pPtr); [COLOR=green]// Bitmap erstellen[/COLOR][/SIZE]
    [COLOR=#008000][/COLOR] 
    [COLOR=#008000]// Anzeige[/COLOR]
    [size=10][size=10]RECT rc;[/SIZE]
    [size=10]::GetClientRect(m_Picture.GetSafeHwnd(), &rc);[/SIZE]
    [size=10]Graphics onGr(m_Picture.GetSafeHwnd());[/SIZE]
    [size=10]onGr.DrawImage(&offBmp, rc.left, rc.top, (rc.right-rc.left), (rc.bottom-rc.top));[/SIZE]
    [/SIZE][/SIZE]
    Alles anzeigen



    Änderungen für 8 Bit:

    Code
    [size=10]LPBITMAPINFO pDIB = m_AviFile.GetDIB();[/SIZE]
    [size=10]pDIB->bmiHeader.biBitCount = 8;[/SIZE]
    [size=10]pDIB->bmiHeader.biSizeImage = pDIB->bmiHeader.biWidth * pDIB->bmiHeader.biHeight;[/SIZE]
    [size=10]pDIB->bmiHeader.biClrUsed = 256;[/SIZE]
    [size=10][COLOR=#0000ff]for[/COLOR][/SIZE][size=10]([/SIZE][size=10][COLOR=#0000ff]int[/COLOR][/SIZE][size=10] i=0; i<256; i++)[/SIZE]
    [size=10]{[/SIZE]
    [size=10]    pDIB->bmiColors[i].rgbRed = i;[/SIZE]
    [size=10]    pDIB->bmiColors[i].rgbGreen = i;[/SIZE]
    [size=10]    pDIB->bmiColors[i].rgbBlue = i;[/SIZE]
    [size=10]    pDIB->bmiColors[i].rgbReserved = 0;[/SIZE]
    [size=10]}[/SIZE]
    Alles anzeigen



    Ich setz den biBitCount von 24 auf 8, die größe vom Bild ist auch anders, als im 24 Bit Image, nämlich nur ein drittel, also (Breite*Höhe) statt (Breite*Höhe*3).
    biClrUsed = 256 sagt, dass eine Palette verwendet wird, wobei 256 Werte darin vorkommen. Am Schluss füll ich die Palette.. sieht jemand einen Fehler? Wenn jemand Beispielbilder sehen will, kann ich das machen, aber ich hoffe, dass jemand den Fehler jetzt schon sieht.

    mfg

    640K ought to be enough for anybody. :eek2:

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 19. Februar 2007 um 14:37
    • #2

    Also ich hab einmal die Szene laufen lassen und mittendrin auf 8 Bit umgeschalten und das kommt dabei raus: (Bild 1) das is ein Thresholdbild, also nicht wundern, warum das so komisch aussieht.. das Inputbild sieht dann so aus: (Bild 2). Normal schauts so aus: (Bild 3)

    Ich versteh die Aufteilung nicht ganz.. die Schrittweite müsste er doch checken, wenn ich ihm 8 bpp mitgeb.. komisch..

    640K ought to be enough for anybody. :eek2:

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 19. Februar 2007 um 15:24
    • #3

    Hab da jetzt nicht soo tief in den Code geschaut, aber reichts wirklich, die Bits runterzusetzen? Musst du nicht selbst das Bild runterrechnen?

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 19. Februar 2007 um 15:30
    • #4

    Tschuldige das hab ich vergessen.. das Inputbild schaut so aus

    RGB RGB RGB RGB RGB RGB...
    RGB RGB RGB RGB RGB RGB...
    ....

    Das Bild, dass ich zu 8 bit anzeigen lassen möchte liegt so im Speicher..

    G G G G G G...
    G G G G G G...
    ...

    Also das hab ich schon beachtet.. von dem her müssts ja gehn, weil die Schrittweite ja 1 Byte pro Bixel ist und nicht 3 Byte. An der Palette liegts sicher mal nicht, weil das Bild so komisch aufgebaut ist.. da hats woanders was. Man hängt immer bei den unnötigsten Dingen.. *argh*

    640K ought to be enough for anybody. :eek2:

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 19. Februar 2007 um 15:52
    • #5

    Hm, wenns planar im Speicher liegt, sind die Bereiche vielleicht ungleich groß. Sprich: Es kommen auf 2 grüne Pixel z.B. ein roter und ein blauer. Die roten und blauen Bereiche sind dann vielleicht halb so groß, und jeder Wert wird zweimal verwendet. Kontrollier mal, ob Grün wirklich ein Drittel füllt.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 19. Februar 2007 um 15:59
    • #6

    Natürlich belegen sie gleich viel Platz, sonst würde das Inputbild auch anders aussehen, denn das kommt auch aus meiner Datenstruktur.. komisch komisch.. Ich habs mit einem anderen Konstruktor probiert:

    Bitmap offBmp( m_InputImage->GetWidth(),
    m_InputImage->GetHeight(),
    m_InputImage->GetWidthStep(),
    PixelFormat8bppIndexed,
    m_InputImage->GetDataPtr() );

    Das Bild ist zwar auf dem Kopf, aber es funktioniert.. trotzdem möchte ich es anders haben.. im Prinzip ist hier nichts anders, sogar das PixelFormat8bppIndexed ist äquivalent zu dem was ich mach.. wenn das Bild einmal richtig stehen würde, wärs ja mal was.. ich bin schon ewig am probieren.. gibts ja nicht..

    640K ought to be enough for anybody. :eek2:

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung