Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#14

AW: Nach CopyMemory werden Daten nicht übernommen

  Alt 6. Jan 2014, 00:17
Danke du bist wirklich hilfsbereit.. ohne den unnötigen Schnick,schnack Drumherum

Ich hatte die Funktion ja schon geschrieben
Delphi-Quellcode:
var
   size: Integer;
   header: BITMAPINFOHEADER;
   pHeader: Pointer;

begin
   if Assigned(PpixelDataArr) then
     SafeArrayDestroy(PpixelDataArr);

   if Assigned(PbitmapInfoArr) then
     SafeArrayDestroy(PbitmapInfoArr);

     size := width * height * bytePerPixel;
     PpixelDataArr := SafeArrayCreateVector(VT_UI1, 0, size);

     PbitmapInfoArr := SafeArrayCreateVector(VT_UI1, 0, sizeof(BITMAPINFOHEADER));

     pHeader := @Header;

     SafeArrayAccessData(PbitmapInfoArr, pHeader);
     Header.biSize := sizeof(BITMAPINFOHEADER);
     Header.biWidth := width;
     Header.biHeight := height;
     Header.biBitCount := bytePerPixel*8;
     Header.biCompression := FourCC;
     SafeArrayUnaccessData(PbitmapInfoArr);
Was sich nicht vertragen hat war diese Umsetzung auf die mir niemand geantwortet hat als ich danach fragte.
Nun habe ich diese Verändert da die Konvertierung "pHeader := @Header" tatsächlich nicht funktioniert hat.
Jetzt kommen die Daten auch richtig an. Zumindest was den Header betrifft mit dem anderen muss ich noch schaun.

Delphi-Quellcode:
procedure TAtmoCtrlLib.AtmoCreateTransferBuffers(header: PBITMAPINFOHEADER; FourCC, bytePerPixel, width,
  height: Integer);
var
  size: Integer;

begin
  if Assigned(PpixelDataArr) then
    SafeArrayDestroy(PpixelDataArr);

  if Assigned(PbitmapInfoArr) then
    SafeArrayDestroy(PbitmapInfoArr);

    size := width * height * bytePerPixel;
    PpixelDataArr := SafeArrayCreateVector(VT_UI1, 0, size);

    PbitmapInfoArr := SafeArrayCreateVector(VT_UI1, 0, sizeof(BITMAPINFOHEADER));

    SafeArrayAccessData(PbitmapInfoArr, Pointer(Header));
    Header.biSize := sizeof(BITMAPINFOHEADER);
    Header.biWidth := width;
    Header.biHeight := height;
    Header.biBitCount := bytePerPixel*8;
    Header.biCompression := FourCC;
    SafeArrayUnaccessData(PbitmapInfoArr);
end;
AtmoCtrlLib.AtmoCreateTransferBuffers(@BitmapInfoHeader, BI_RGB, 4, 64, 48);

Wie gesagt ich muss den Kram alles selber machen da gibt es nichts vergleichbares.
War wohl nur für C++ C# gedacht!

EDIT:
Eigentlich müssten doch die Pixel inklusive der Farben in Bmp.bmBits vorhanden sein oder?
Hmm wenn nicht muss ich diese wohl noch zu psa.rgsabound[0] hinzufügen sehe ich das richtig?

Das will irgendwie nicht mit den PixelArray
Im Moment fällt mir nichts mehr ein.

gruss und Danke..

Geändert von EWeiss (11. Jul 2019 um 15:42 Uhr)
  Mit Zitat antworten Zitat