AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamische Arrays

Ein Thema von Garfield · begonnen am 19. Okt 2014 · letzter Beitrag vom 21. Okt 2014
 
Benutzerbild von Garfield
Garfield

Registriert seit: 9. Jul 2004
Ort: Aken (Anhalt-Bitterfeld)
1.335 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Dynamische Arrays

  Alt 21. Okt 2014, 07:00
Die letzte Schleife habe ich nun geändert nach:
Code:
for (w = 0; w < maskWidth * 3; w += 3)
{
   *(dstp + minW + w)    = (blurR[w / 3 + radius + 1] - blurR[w / 3 + radius]) / (radius * 2 + 1);
   *(dstp + minW + w + 1) = (blurG[w / 3 + radius + 1] - blurG[w / 3 + radius]) / (radius * 2 + 1);
   *(dstp + minW + w + 2) = (blurB[w / 3 + radius + 1] - blurB[w / 3 + radius]) / (radius * 2 + 1);
}
Die / 3 hatte ich vergessen. Durch die Bereichsänderung ist es aber kein senkrechter Strich mehr sondern das Zielrechteck steht rechts neben dem Quellrechteck.

Es scheint an den Pointern in diesem Bereich zu liegen:
Code:
if (minW = (w - radius * 3))
{
   blurB[0] = *(dstp + tmp);
   blurG[0] = *(dstp + tmp + 1);
   blurR[0] = *(dstp + tmp + 2);
}
else
{
   blurB[w / 3] = blurB[(w / 3) - 1] + *(dstp + tmp);
   blurG[w / 3] = blurG[(w / 3) - 1] + *(dstp + tmp + 1);
   blurR[w / 3] = blurR[(w / 3) - 1] + *(dstp + tmp + 2);
}
Es soll der Farbwert von *(dstp + tmp) nach blurB[0] usw übertragen werden. Wenn ich den Bereich auskommentiere, liegen die Rechtecke übereinander.

Gauss funktioniert:
Code:
const unsigned int matrix[25] = {1, 4, 7, 4, 1, 4, 16, 26, 16, 1, 7, 26, 41, 26, 7, 4, 16, 26, 16, 4, 1, 4, 7, 4, 1};
   
int w, h, mw, mh, rp;
int minW, maxW, minH, maxH;

unsigned int blurR, blurG, blurB;
unsigned int idx;
unsigned int count;

minH = vi.height - maskTop - maskHeight;
maxH = vi.height - maskTop - 1;
minW = maskLeft * 3;
maxW = (maskLeft + maskWidth - 1) * 3;
      
for (rp = 0; rp < replays; rp ++)
{
   dstp = dst->GetWritePtr();
   dstp = dstp + (minH * dst_pitch);

   for (h = minH; h < maxH; h ++)
   {   
      for (w = minW; w < maxW; w += 3)
      {
         blurR = 0;
         blurG = 0;
         blurB = 0;
         count = 0;

         for (mh = -2; mh < +2; mh ++)
         {
            for (mw = -6; mw < +6; mw += 3)
            {
               if ((0 <= h + mh) && (h + mh < dst_height) && (0 <= w + mw) && (w + mw < dst_width))
               {
                  idx = (mh + 2) * 5 + abs((int)((mw + 6) / 3));
                  count = count + matrix[idx];
                  blurR = blurR + (*(dstp + w + (mw * dst_pitch)) * matrix[idx]);
                  blurG = blurG + (*(dstp + w + (mw * dst_pitch) + 1) * matrix[idx]);
                  blurB = blurB + (*(dstp + w + (mw * dst_pitch) + 2) * matrix[idx]);
               }
            }
         }
         if (count > 0)
         {
            *(dstp + w)    = blurR / count; // Blauwert eintragen.      
            *(dstp + w + 1) = blurG / count; // Grünwert eintragen.
             *(dstp + w + 2) = blurB / count; // Rotwert eintragen.
         }
      }
      dstp = dstp + dst_pitch;
   }
}
Allerdings sind hier blurR, blurG und blurB vom Typ Int. Oben wegen den Array int*. Ein
Code:
blurB[0] = (int)*(dstp + tmp);
bringt leider auch nichts.
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  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 00:55 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