Autor Beitrag
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 03.07.12 15:18 
Hey Leute,

ich versuch grad verzweifelt die Daten einer TBitmap im RGB565-Format auszulesen. Folgender Code kommt dabei zum Einsatz:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
  FillChar (bInfo, SizeOf(bInfo), 0);
  with bInfo.bmiHeader do
  begin
      biSize := SizeOf(bInfo.bmiHeader);
      biWidth := bmp.Width;
      biHeight := -bmp.Height;
      biPlanes := 1;
      biBitCount := 16;
      biCompression := BI_BITFIELDS;
  end;
  with bInfo.bmiColors[0do begin
    rgbRed   := $F800//1111 1000 0000 0000
    rgbGreen := $07E0//0000 0111 1110 0000
    rgbBlue  := $001F//0000 0000 0001 1111
  end;
  buffer := GetMem(bmp.Width * bmp.Height * 4);
  try
  if GetDIBits(bmp.Canvas.Handle, bmp.Handle, 0, bmp.Height, buffer, bInfo, DIB_RGB_COLORS) = 0 then
    raise Exception.Create(format('unable to read bitmap data. error code: %d', [GetLastError]));

  //do something with the data

  finally
    Freemem(buffer);
  end;

So bekomm ich die Daten im RGB555 Format, obwohl ich ja die Bitmaske angegeben hab. In der Doku steht das es eig. so gehen müsste und ich hab auch bei google nix zu dem Problem gefunden. In jedem Thread den ich gefunden hab scheint das so zu gehen, wie es soll. Nur bei mir nich :/ Wär super, wenn ihr mir da weiter helfen könntet.

MfG & Thx Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^


Zuletzt bearbeitet von Bergmann89 am Di 03.07.12 16:38, insgesamt 1-mal bearbeitet
Martok
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 3661
Erhaltene Danke: 604

Win 8.1, Win 10 x64
Pascal: Lazarus Snapshot, Delphi 7,2007; PHP, JS: WebStorm
BeitragVerfasst: Di 03.07.12 15:49 
Ich habs nicht nachgerechnet, aber laut dem Kollegen von VirtualDub ist deine G-Maske falsch.
Und ich sag ja (gestern in Skype), ich würd's selber umrechnen, da weiß ich wenigstens dass es stimmt :P

EDIT: der erste Comment da tut sogar genau das was du auch tun willst.

_________________
"The phoenix's price isn't inevitable. It's not part of some deep balance built into the universe. It's just the parts of the game where you haven't figured out yet how to cheat."
Bergmann89 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1742
Erhaltene Danke: 72

Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
BeitragVerfasst: Di 03.07.12 16:42 
Hey,

die G-Maske war n Typo, jetz is sie richtig^^ Ich weiß das du mir das gesagt hast, aber ich will es trotzdem mit den GDI Funktionen machen, weil ich denke das dort das Blendending un der ganze Kram über die MMX Befehle laufen, und die sollten schneller sein, als direkt in Software.

Der 2. Kommentar is intressant, aber dafür brauch ich auch erstma nen AVI-Stream, oder liegen bei dem Pointer nur die Rohdaten?

Der 3. Kommentar is auch intressant. Er mein, dass es nich geht, weil die gespeicherte Größe am Anfang des Records falsch ist. Also hab ich mal ein BitmapV4Header gebaut, aber damit gehts trotzdem nicht :(

MfG Bergmann.

_________________
Ich weiß nicht viel, lern aber dafür umso schneller^^