![]() |
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:
Leider bekomme ich eine AV (216). Was mach ich denn falsch ? :gruebel:
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; |
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:
Oder du veränderst die Formel noch etwas und rechnest von ScanLine(0) aus.
rgba := PDWORD(DWORD(pBmpBits) + DWORD(x + (fHeight - 1 - y) * fWidth) * 4);
// pBmpBits muß dabei auf die letzte Zeile zeigen, also ScanLine(fHeight - 1) |
AW: Pixel vom Pointer lesen klappt nicht...
Zitat:
Delphi-Quellcode:
Ist also der Zeiger auf die Bitmap Bits.
//...
Result := CreateDIBitmap(TempDC, BmpInfo.bmiHeader, CBM_INIT, BitmapBits, BmpInfo, DIB_RGB_COLORS); 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:
Add:
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; Hm, nutze ich
Delphi-Quellcode:
ist alles in Butter...
CreateDIBSection
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:27 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