AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Durchschnittsfarbe eines TBitmap via Scanline?
Thema durchsuchen
Ansicht
Themen-Optionen

Durchschnittsfarbe eines TBitmap via Scanline?

Ein Thema von Cyberstorm · begonnen am 21. Jan 2008 · letzter Beitrag vom 22. Jan 2008
 
Cyberstorm

Registriert seit: 23. Okt 2003
159 Beiträge
 
Delphi 2010 Architect
 
#9

Re: Durchschnittsfarbe eines TBitmap via Scanline?

  Alt 22. Jan 2008, 06:07
also ich habe viel gegrübelt und stehe denk technisch immernoch vor problemen .

nochmal zum problem: ich will von vielen bildern (alle 280x210 --> 4 zu 3) durchschnittswerte von bestimmten pixelbereichen ermitteln, also sozusagen das bild gröber auflösen. dazu soll wirklich jeder pixel mit einbezogen werden. dies soll cpu technisch so schnell wie möglich passieren.
ich zeig euch einfach mal, wasich bisher an code habe:

Delphi-Quellcode:
const
  TestPointsX = 20;
  TestPointsY = 15;
  ImageHeight = 210;
type
  TRefPoints = array[1..TestPoints, 1..TestPoints] of TRGBQuad;

  TJPEGBMP = class (TJpegImage)
  public
    property Bitmap;
  end;

procedure GetRefPoints(FileName: String);
var
  t: TImage;
  i, j, x: Integer;
  P: array[1..ImageHeight] of PRGBQuad;
  average: array[1..TestPointsX, 1..TestPointsY, 1..3] of Integer;
begin
  t:=TImage.Create(nil);
  t.Picture.LoadFromFile(FileName);
  TJPEGBMP(t.Picture.Graphic).Bitmap.PixelFormat:=pf32Bit;
  for i:=1 to 210 do P[i]:=TJPEGBMP(t.Picture.Graphic).Bitmap.ScanLine[i-1];
end;
ich dachte mir, ersteinmal das komplette bild per scanline einzuscannen damit ich das nicht irgendwo doppelt machen muss.
weiterhin war meine idee, die werte für jeweils r g b in den average array zu addieren und am ende den durchschnitt für den TRefPoints array in Byte rgb werte umzurechnen.

der code klappt insoweit, dass ich zumindest per p[0].rgbRed den richtigen wert für pixel 0/0 bekomme und inc(p[0]) liefert auch korrekt pixel 1/0 usw.

bin nun aber ein wenig am verzweifeln, wie ich die schleife zum erstellen der durchscnittswerte aufziehen soll.
mir schwirren sachen wie:
Delphi-Quellcode:
for i:=1 to 210 do

  for x:=1 to TestPoints
  for i:=1 to (210 div testpoints) do
   for j:=1 to (280 div testpoints) do
    begin

    end;


   //last
  for i:=(210 - (210 mod testpoints)) to (210 mod testpoints) do
   for j:=(280 - (280 mod testpoints)) to (280 mod testpoints) do
im kopf rum aber ich kriegs einfach nicht zuende gedacht.

villeicht kann mir ja jemand auf die sprünge helfen .

grüße
konrad
  Mit Zitat antworten Zitat
 


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 21:03 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