AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Pixel vom Pointer lesen klappt nicht...
Thema durchsuchen
Ansicht
Themen-Optionen

Pixel vom Pointer lesen klappt nicht...

Ein Thema von turboPASCAL · begonnen am 24. Jun 2010 · letzter Beitrag vom 24. Jun 2010
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

Pixel vom Pointer lesen klappt nicht...

  Alt 24. Jun 2010, 16:36
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 ?
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Pixel vom Pointer lesen klappt nicht...

  Alt 24. Jun 2010, 16:52
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.
$2B or not $2B

Geändert von himitsu (24. Jun 2010 um 16:56 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#3

AW: Pixel vom Pointer lesen klappt nicht...

  Alt 24. Jun 2010, 17:48
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 CreateDIBSection ist alles in Butter...
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser

Geändert von turboPASCAL (24. Jun 2010 um 18:24 Uhr) Grund: Add
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:11 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