Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Auf Pixel mit Pointer zugreifen (https://www.delphipraxis.net/23031-auf-pixel-mit-pointer-zugreifen.html)

vbinsider 27. Mai 2004 19:17


Auf Pixel mit Pointer zugreifen
 
Hi Leute,

ich möchte mit der Scanline-Eigenschaft auf die einzelnen Pixel eines Bitmaps zugreifen. Ich hab dazu den folgenden Quellcode verwendet

Delphi-Quellcode:
var BMPData : TBitmap;
    BMPPixel : PRGBArray;
    Written : Boolean;
    x,y     : integer;
begin

.
.
.

  BMPData.LoadFromFile(BMPFile); // BMPFile wird vorher mit einem OpenDialog eingelesen
  BMPData.PixelFormat:= pf24Bit;

.
.
.

  Written:= True;
  for y:= 0 to BMPData.Height-1 do
  begin
    BMPPixel:= BMPData.ScanLine[y];
    for x:= 0 to BMPData.Width-1 do
    begin
      If Written Then
      begin
        Pixel.Red:= BMPPixel^[x].rgbtRed;
        Pixel.Green:= BMPPixel^[x].rgbtGreen;
        Pixel.Blue:= BMPPixel^[x].rgbtBlue;

        Pixel.count:= 1;
        Written:= False;
      end

.
.
.
Aber sobald ich versuche, auf das Array BMPPixel zuzugreifen, kriege ich einen Speicherzugriffsfehler.

Bitte helft mir!

mfg
vbinsider

NeoXX 27. Mai 2004 20:54

Re: Auf Pixel mit Pointer zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dies habe ich bei einem Programm benutzt das Screenshots machen, diese verkleinern und dann speichern soll.
Als Anhang ein Auszug aus dem Code.

Ich hoffe es hilft Dir weiter... :wink:

vbinsider 27. Mai 2004 21:09

Re: Auf Pixel mit Pointer zugreifen
 
Erstmal danke für deinen Code.

Aber du ermittelst ja nur Zeiger auf drei der Zeilen. Alles weitere verschwindet in
Antialiasing_4x().

Vielleicht erkläre ich erstmal, was ich überhaupt vorhabe: Mein Programm soll eine BMP-Datei einlesen, Pixel für Pixel mit ScanLine und Pointern. Die Farbwerte sollen zur späteren Weiterverwendung in einem FileStream gespeichert werden und zwar mittels eines Records.

Ungefähr so:

Delphi-Quellcode:
type TPixelData = packed record
      Red,Green,Blue : Byte;
      Count : Integer;
end;

// später dann
var RecFile : TFileStream;
    Bit    : TBitmap;

begin
  Bit:= TBitmap.Create;
  Bit.LoadFromFile('c:\test.bmp');
  RecFile:= TFileStream.Create('c:\blub2.dat',fmOpenWrite);

  // Hier soll dann der Code zum Einlesen stehen

  RecFile.Free;
  Bit.Free;
end;
Im Prinzip will ich dann eine Datei haben, in der diese Records stehen. Dann wird mit diesen Records gerechnet und später soll aus den Informationen in den Records wieder ein Bitmap konstruiert werden, das müsste eigentlich auch mit ScanLine gehen.

Die Frage ist: Wie??

Hoffe, dass ihr jetzt wisst, was ich überhaupt meine.

mfg
vbinsider

NeoXX 29. Mai 2004 18:30

Re: Auf Pixel mit Pointer zugreifen
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, das dürfte Dir aber jetzt helfen ... hoffe ich :zwinker:

vbinsider 2. Jun 2004 17:28

Re: Auf Pixel mit Pointer zugreifen
 
Danke, das war genau das, was ich suchte.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:34 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