![]() |
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:
Aber sobald ich versuche, auf das Array BMPPixel zuzugreifen, kriege ich einen Speicherzugriffsfehler.
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 . . . Bitte helft mir! mfg vbinsider |
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: |
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:
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.
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; Die Frage ist: Wie?? Hoffe, dass ihr jetzt wisst, was ich überhaupt meine. mfg vbinsider |
Re: Auf Pixel mit Pointer zugreifen
Liste der Anhänge anzeigen (Anzahl: 1)
So, das dürfte Dir aber jetzt helfen ... hoffe ich :zwinker:
|
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