Forum: Programmieren allgemein
by Zacherl,
7. Jan 2014
32 Bit Bitmaps sind 4 Byte pro Pixel. Jeweils 1 Byte für A, R, G und B.
Forum: Programmieren allgemein
by Zacherl,
7. Jan 2014
So wie ich das verstanden habe, beziehen sich 2, 3 und 4 auf den Wert den bytePerPixel haben kann, wenn FourCC auf BI_RGB gesetzt ist. Das heißt, du kannst in diesem Falle 16, 24 und 32 Bit Bitmaps verwenden.
Forum: Programmieren allgemein
by Zacherl,
6. Jan 2014
Sollte analog zum Header folgendermaßen funktionieren:
var
Data: Pointer;
{ ... }
size := width * height * bytePerPixel;
PpixelDataArr := SafeArrayCreateVector(VT_UI1, 0, size);
SafeArrayAccessData(PpixelDataArr, Data);
CopyMemory(Data, Pointer(NativeUInt(BitmapStream.Memory) + SizeOf(TBitmapFileHeader) + SizeOf(TBitmapInfoHeader)), size);
SafeArrayUnaccessData(PpixelDataArr);
Forum: Programmieren allgemein
by Zacherl,
6. Jan 2014
Kannst du mal den Code zeigen, den du für das Kopieren der Pixeldaten verwendest? Eigentlich sollte das ja analog zum Header funktionieren.
Forum: Programmieren allgemein
by Zacherl,
6. Jan 2014
Du schreibst den Header ja auch nirgendwo in das Array rein :P Probiers mal so:
var
BitmapInfo: TBitmapInfoHeader;
Data: Pointer;
{ ... }
SafeArrayAccessData(PbitmapInfoArr, Data);
CopyMemory(Data, @BitmapInfo, SizeOf(BitmapInfo));
SafeArrayUnaccessData(PbitmapInfoArr);
Die SafeArrayAccessData liefert dir als Output Parameter einen komplett neuen Pointer. Du weißt zwar vor dem...
Forum: Programmieren allgemein
by Zacherl,
5. Jan 2014
Ohne die SaveArrays jetzt wirklich zu kennen: Wie ich das sehe, reicht es nicht einfach per PpixelDataArr.pvData := Bmp.bmBits die Daten zuweisen zu wollen. Ich würde hier SafeArrayAccessData verwenden, um mir einen Zeiger auf die tatsächlichen Daten zu holen. Danach sollte ein CopyMemory(PtrFromAccessDataAPI, Bmp.bmBits, size) ausreichen, um die Daten zu kopieren. Abschließend aber...