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