Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Graphics32-Frage!! (https://www.delphipraxis.net/96485-graphics32-frage.html)

bingo72 25. Jul 2007 15:06

Re: Graphics32-Frage!!
 
Leider hilft auch Dein letzter Vorschlag nicht...

Es scheint wirklich so zu sein, daß bei Graphikkarten die keine 32bit- Farbtiefe darstellen können, eine Verwendung von Graphics32 nicht möglich ist??!!

SirThornberry 25. Jul 2007 15:09

Re: Graphics32-Frage!!
 
sind bei der Graphics32 keine Quelltexte dabei? dann könntest du ja schauen wie der Resampling-Algorythmus aussieht

bingo72 25. Jul 2007 15:27

Re: Graphics32-Frage!!
 
Ich hab jetzt nochmals alles durchdebugt und es stellt ihn beim Resampling in der Draw-Methode auf...

SirThornberry 25. Jul 2007 15:30

Re: Graphics32-Frage!!
 
Aber es ist eben die Frage bei welchem Teil in der Resampling-Methode. Es muss ja versucht werden funktionen zu verwenden welche mit der aktuellen Farbtiefe zu tun haben (obwohl die aktuelle Farbtiefe eigentlich da nicht rein gehört weil es nicht um die anzeige geht)

bingo72 25. Jul 2007 15:45

Re: Graphics32-Frage!!
 
Delphi-Quellcode:
function BuildMappingTable(
  DstLo, DstHi: Integer;
  ClipLo, ClipHi: Integer;
  SrcLo, SrcHi: Integer;
  Kernel: TCustomKernel): TMappingTable;
var
  SrcW, DstW, ClipW: Integer;
  Filter: TFilterMethod;
  FilterWidth: TFloat;
  Scale, OldScale: TFloat;
  Center: TFloat;
  Count: Integer;
  Left, Right: Integer;
  I, J, K: Integer;
  Weight: Integer;
begin
  SrcW := SrcHi - SrcLo;
  DstW := DstHi - DstLo;
  ClipW := ClipHi - ClipLo;
  if SrcW = 0 then
  begin
    Result := nil;
    Exit;
  end
  else if SrcW = 1 then
  begin
    SetLength(Result, ClipW);
    for I := 0 to ClipW - 1 do
    begin
      SetLength(Result[I], 1);
      Result[I][0].Pos := 0;
      Result[I][0].Weight := 256;
    end;
    Exit;
  end;
  SetLength(Result, ClipW);
  if ClipW = 0 then Exit;

  if FullEdge then Scale := DstW / SrcW
  else Scale := (DstW - 1) / (SrcW - 1);

  Filter := Kernel.Filter;
  FilterWidth := Kernel.GetWidth;
  K := 0;

  if Scale = 0 then
  begin
    Assert(Length(Result) = 1);
    SetLength(Result[0], 1);
    Result[0][0].Pos := (SrcLo + SrcHi) div 2;
    Result[0][0].Weight := 256;
  end
  else if Scale < 1 then
  begin
    OldScale := Scale;
    Scale := 1 / Scale;
    FilterWidth := FilterWidth * Scale;
    for I := 0 to ClipW - 1 do
    begin
      if FullEdge then
        Center := SrcLo - 0.5 + (I - DstLo + ClipLo + 0.5) * Scale
      else
        Center := SrcLo + (I - DstLo + ClipLo) * Scale;
      Left := Floor(Center - FilterWidth);
      Right := Ceil(Center + FilterWidth);
      Count := -256;
      for J := Left to Right do
      begin
        Weight := Round(256 * Filter((Center - J) * OldScale) * OldScale);
        if Weight <> 0 then
        begin
          Inc(Count, Weight);
          K := Length(Result[I]);
          SetLength(Result[I], K + 1);
          Result[I][K].Pos := [b]Constrain(J, SrcLo, SrcHi - 1);[/b]    --> hier stellt es ihn auf!!     
          Result[I][K].Weight := Weight;
        end;
      end;
     [...]
[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

SirThornberry 25. Jul 2007 15:47

Re: Graphics32-Frage!!
 
bist du mal mit F7 durchgesteppt an welcher stelle es genau knallt?

[Edit]Hab den Kommentaar im Quelltext gefunden.
Wie sieht das Meckern aus? welche Meldung kommt?

Kannst du mal in die Funktion/procedure/Methode "Constrain" rein steppen an welcher Stelle es dort knallt?

bingo72 25. Jul 2007 15:59

Re: Graphics32-Frage!!
 
Delphi-Quellcode:
function Constrain(const Value, Lo, Hi: Integer): Integer;
{$IFDEF USEINLINING}
begin
  if Value < Lo then Result := Lo
  else if Value > Hi then Result := Hi
  else Result := Value;
{$ELSE}
asm
        CMP      EDX,EAX
        [b]db $0F,$4F,$C2           /// CMOVG    EAX,EDX[/b] --> hier knallts!!
        CMP      ECX,EAX
        db $0F,$4C,$C1           /// CMOVL    EAX,ECX
{$ENDIF}
end;

Mit folgender Fehlermeldung:

Externe Exception C000001D

bingo72 25. Jul 2007 16:00

Re: Graphics32-Frage!!
 
Ja hab mit F7 durchgesteppt, um an die Stelle zu kommen!!

bingo72 30. Aug 2007 15:24

Re: Graphics32-Frage!!
 
Der Grund wie sich später herausstellte:

Der PC konnte keine 32-bit-Farben darstellen und von daher kamen die Probleme!! Also Graphics32-Komponenten auch wirklich nur bei 32-bit-Graphikkarten verwenden!!


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:01 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz