Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Pixel vom Pointer lesen klappt nicht... (https://www.delphipraxis.net/152501-pixel-vom-pointer-lesen-klappt-nicht.html)

turboPASCAL 24. Jun 2010 15:36

Pixel vom Pointer lesen klappt nicht...
 
Hi,

Ich habe hier ein kleines Problem, ich möchte einen Pixel vom Pointer lesen bzw. diesen setzen.
Das sieht so aus:
Delphi-Quellcode:
procedure {TGraphic.}SetPixel32(x, y: integer; Color: Cardinal);
var
  rgba: PDWORD;
begin
  if fPixelFormat = pf32Bit then
  begin
    rgba := PDWORD(DWORD(pBmpBits) + DWORD(x + y * fWidth) * 4);
    rgba^ := Color;
  end else
    Windows.SetPixel(fDC, x, y, Color);
end;
Leider bekomme ich eine AV (216). Was mach ich denn falsch ? :gruebel:

himitsu 24. Jun 2010 15:52

AW: Pixel vom Pointer lesen klappt nicht...
 
Wo zeigt denn pBmpBits hin?

PS: Im Bitmap liegen die Zeilen andersrum im Speicher,
bzw. die Zeilen werden von unten nach oben hintereinander da rum.


Delphi-Quellcode:
rgba := PDWORD(DWORD(pBmpBits) + DWORD(x + (fHeight - 1 - y) * fWidth) * 4);

// pBmpBits muß dabei auf die letzte Zeile zeigen, also ScanLine(fHeight - 1)
Oder du veränderst die Formel noch etwas und rechnest von ScanLine(0) aus.

turboPASCAL 24. Jun 2010 16:48

AW: Pixel vom Pointer lesen klappt nicht...
 
Zitat:

Wo zeigt denn pBmpBits hin?
Delphi-Quellcode:
 //...
Result := CreateDIBitmap(TempDC, BmpInfo.bmiHeader, CBM_INIT, BitmapBits, BmpInfo, DIB_RGB_COLORS);
Ist also der Zeiger auf die Bitmap Bits.

In einem anderem Programm bekomm ich mit meiner Metode keine AV. ( siehe Metaballs - Demo )
Das auslesen eines Pixels klapp komischer weise ohne Probleme.
Delphi-Quellcode:
function TGraphic.GetPixel32(x, y: integer): Cardinal;
var
  rgba: PDWORD;
begin
  Result := 0;

  if fPixelFormat = pf32Bit then
  begin
    rgba := PDWORD(DWORD(pBmpBits) + DWORD(x + y * fWidth) * 4);
    result := DWORD(rgba);
  end;
end;
Add:
Hm, nutze ich
Delphi-Quellcode:
CreateDIBSection
ist alles in Butter...


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz