Toon posts:

[delphi] scanline geeft verkeerde roodwaardes

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo allen,

Ik ben bezig met een oog waarscheinlijk zeer simpel programmatje, het komt er op neer dat de scanline function alle rood waardes van elke pixel binnen de bitmap scant, en deze waardes opslaat in een Listbox. Ik heb de onderstaande code geschreven. Echter als ik de bmp file open en hem scan op roodwaardes krijg ik alleen maar waardes van 255 terug. Dit klopt niet. Dit heb ik ook gecheckt met een foto bewerkings programma. Onderstaand mijn code. Weet iemande een oplossing voor mijn probleem??

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var
 PixelPtr: PRGBQuad;
 Color, y, x, w, h, I: Integer;
 S: String;
begin
    Bitmap1 := TBitmap.Create;
    if OpenPictureDialog1.Execute then
    begin
        Bitmap1.LoadFromFile(OpenPictureDialog1.FileName);
    end;
    for y := 0 to Bitmap1.Height - 1 do
    begin
      PixelPtr := PRGBQuad(Bitmap1.ScanLine[y]);
      for x := 0 to Bitmap1.Width - 1 do
      begin
         Color := PixelPtr^.rgbGreen;
         Listbox1.Items.Add(IntToStr(color));
      end;
end;

end;

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Hoe kom je erbij om die Scanline pointer linea recta naar PRGBQuad te casten? Zou je dat niet eerst even checken in de relevante BitmapInfo structuren?

En als je het plaatje er nu ff bij post is helemaal handig :)

Professionele website nodig?


Verwijderd

Topicstarter
Afbeeldingslocatie: http://www.xs4all.nl/~braker/pic.bmp

Naar wat zou ik in die bitmap info structuren moeten kijken?

  • jvdmeer
  • Registratie: April 2000
  • Laatst online: 20-08 21:53
Probeer eens voordat je aan 't uitlezen van de bitmap begint:
Delphi:
1
Bitmap1.Bitmap.PixelFormat:=pf24bit;

of
Delphi:
1
Bitmap1.PixelFormat:=pf24bit;


Weet niet meer zo snel welke goed is.
Maar je moet de bitmap op 24-bits instellen voordat je begint aan de FOR-lussen.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

PRGBQuad en dan 24 bits? Ja, als je er echt heel zeker van zijn zijn dat het fout gaat, moet je dat doen :)

Gebruik ik geval van een 24 bits bitmap dan een PRGBTriple.

日本!🎌


  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Waarom gebruik je niet gewoon de canvas.pixels[x,y] property van deplhi? Hier staat namelijk in welke kleur deze pixel op positie: x,y heeft. En dat ook in in het door delphi handlebare Tcolor type.

Lijkt mij veel eenvoudiger.

  • _Thanatos_
  • Registratie: Januari 2001
  • Laatst online: 22-06 10:32

_Thanatos_

Ja, en kaal

dijkstar, heb je weleens ondervonden hoe enorm traag dat is? Het zal je misschien verbazen dat TCanvas.Pixels 50 tot 100 keer trager kan zijn dan TBitmap.Scanline, maar het is echt zo ;)

日本!🎌


  • mrClass
  • Registratie: April 2002
  • Laatst online: 17-04-2025
Ik weet eigenlijk niet beter dan de pixels[]. Maar bedankt voor de Tip.
Pagina: 1