AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Korrekte biSizeImage?

Ein Thema von EWeiss · begonnen am 20. Jun 2019 · letzter Beitrag vom 21. Jun 2019
Antwort Antwort
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#1

AW: Korrekte biSizeImage?

  Alt 21. Jun 2019, 17:44
Eventuell ein Rundungsfehler?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#2

AW: Korrekte biSizeImage?

  Alt 21. Jun 2019, 18:09
Eventuell ein Rundungsfehler?
Die frage ist welcher denn ich mache mit dem Bitmap nichts außer das es als Container verwendet wird.
Ansonsten ist es ein leeres Schwarzes Bitmap.
Es ist ja kein Fehler der beim Rendern auf das DC auftritt sondern das leere Bitmap selbst.
Es fehlen unten am Rand einfach ein paar Pixel.

Delphi-Quellcode:
function TBassPlayer.CreateDIBSection(DC: HDC; Width, Height, BitCount: Integer): HBitmap;
var
  bi: BITMAPINFO;
begin

  // BITMAPINFOHEADER befuellen
  ZeroMemory(@bi, sizeof(BITMAPINFO));
  bi.bmiHeader.biSize := sizeof(BITMAPINFOHEADER);
  bi.bmiHeader.biWidth := FWidth;
  bi.bmiHeader.biHeight := -FHeight;
  bi.bmiHeader.biPlanes := 1;
  bi.bmiHeader.biBitCount := Word(BitCount);
  bi.bmiHeader.biCompression := BI_RGB;
  bi.bmiHeader.biSizeImage := DWord(Abs(bi.bmiHeader.biHeight)) *
    ByteAlignOnWord(Byte(bi.bmiHeader.biBitCount), bi.bmiHeader.biWidth);

  Result := Windows.CreateDIBSection(DC, bi, DIB_RGB_COLORS, pAddr, 0, 0);
end;
//..
hDibSec := CreateDIBSection(hTempDc, FWidth, FHeight, 24);
Deshalb meine Vermutung das es hier in der Funktion auftritt wo das HBitmap erstellt wird. (bi.bmiHeader.biSizeImage)

Das Problem mit dem schrägen strich durch das Bitmap lag hier dran..
Delphi-Quellcode:
procedure TBassPlayer.FadeBackBuffer;

type TPixelArray = packed array[0..0] of packed record
    b, g, r: Byte;
  end;
  PPixelArray = ^TPixelArray;

var
  dx: integer;
  dy: integer;
  i: integer;

begin

    BitBlt(hTempDc, 0, 0, FWidth, FHeight, DC, 0, 0, SRCCOPY);

    // Fade die Daten
    for dy := 0 to FHeight - 1 do
    begin
      for dx := 0 to FWidth - 1 do // Hier hatte ich vergessen die weite um 1 zu dekrementieren. (Deshalb der schräge strich bei der Visualisierung)
      begin
        i := PPixelArray(pAddr)[dy * FWidth + dx].b - 15;
        if i < 0 then
          i := 0;
        PPixelArray(pAddr)[dy * FWidth + dx].b := i ;

        i := PPixelArray(pAddr)[dy * FWidth + dx].g - 15;
        if i < 0 then
          i := 0;
        PPixelArray(pAddr)[dy * FWidth + dx].g := i ;

        i := PPixelArray(pAddr)[dy * FWidth + dx].r - 15;
        if i < 0 then
          i := 0;
        PPixelArray(pAddr)[dy * FWidth + dx].r := i ;
      end;
    end;

    // Blite das gefadete Bild in den Background Buffer.
    BitBlt(DC, 0, 0, FWidth, FHeight, hTempDc, 0, 0, SRCCOPY);

end;
gruss

Geändert von EWeiss (21. Jun 2019 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz