Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   GR32_PNG.pas (https://www.delphipraxis.net/76331-gr32_png-pas.html)

BrainCracked 2. Sep 2006 14:21


GR32_PNG.pas
 
Wie muss man diese Komponente installieren? muss sie in das packuat von grafics32 eingebunden werden?

http://www.delphipraxis.net/internal...ct.php?t=90749
hierfür brauch ich das nämlich.

Khabarakh 2. Sep 2006 14:27

Re: GR32_PNG.pas
 
In der Unit befindet sich keine Komponente, also gibts auch nichts zum Installieren. Soll heißen, einfach die Datei in den Suchpfad legen.

ManuMF 2. Sep 2006 15:38

Re: GR32_PNG.pas
 
Ich glaube, BrainCracked hat Probleme mit der GR32_PNG selbst, denn die verwendet die Unit PNGImage, und die ist z.B. bei mir auch nicht vorhanden.

BrainCracked 2. Sep 2006 15:48

Re: GR32_PNG.pas
 
ja genau. beim compilieren makiert er immer die zeile wo was von der PNGImage steht. Wo kriegt man die denn her?

BrainCracked 2. Sep 2006 15:54

Re: GR32_PNG.pas
 
Hat sich erledigt. Habs hingekriegt.

Elvis 2. Sep 2006 16:45

Re: GR32_PNG.pas
 
Zitat:

Zitat von BrainCracked
Hat sich erledigt. Habs hingekriegt.

Und bitte, bitte mit Zucker oben drauf, erkläre doch was du wie geacht hast.
Dann weiß der nächste, der das hier in der DP sucht, wie er sein Problem lösen kann. ;)

Khabarakh 2. Sep 2006 16:48

Re: GR32_PNG.pas
 
Noch besser wärs, wenn gleich der Autor der Komponente seine Quellen angegeben hätte ;) .

turboPASCAL 2. Sep 2006 22:28

Re: GR32_PNG.pas
 
Nur mal so nebenbei, ich habe mit das einfach mal so (siehe D.-Code) umgeschrieben. Dann kann man auch auf die extra Unit verzichten und die handhabung ist für mich einfacher/fexibler.

Delphi-Quellcode:
// Function: PNGToBitmap32(DstBitmap: TBitmap32; Png: TPngObject): Boolean;
// Das Result ist TRUE wenn das PNG-Image einen Alphachannel hat.
//////////////////////////////////////////////////////////////////////////////

function PNGtoBitmap32(DstBitmap: TBitmap32; Png: TPngObject): Boolean;
var
  TransparentColor: TColor32;
  PixelPtr: PColor32;
  AlphaPtr: PByte;
  X, Y: Integer;
begin
  DstBitmap.Assign(PNG);
  DstBitmap.ResetAlpha;

  case PNG.TransparencyMode of
    ptmPartial: // 8Bit Image
      begin
        if (PNG.Header.ColorType = COLOR_GRAYSCALEALPHA) or
           (PNG.Header.ColorType = COLOR_RGBALPHA) then
        begin
          PixelPtr := PColor32(@DstBitmap.Bits[0]);
          for Y := 0 to DstBitmap.Height - 1 do
          begin
            AlphaPtr := PByte(PNG.AlphaScanline[Y]);
            for X := 0 to DstBitmap.Width - 1 do
            begin
              PixelPtr^ := (PixelPtr^ and $00FFFFFF) or (TColor32(AlphaPtr^) shl 24);
              Inc(PixelPtr);
              Inc(AlphaPtr);
            end;
          end;
        end;
        Result := True;
      end;

    ptmBit: // 24 Bit Image
      begin
        TransparentColor := Color32(PNG.TransparentColor);
        PixelPtr := PColor32(@DstBitmap.Bits[0]);
        for X := 0 to (DstBitmap.Height - 1) * (DstBitmap.Width - 1) do
        begin
          if PixelPtr^ = TransparentColor then
            PixelPtr^ := PixelPtr^ and $00FFFFFF;
          Inc(PixelPtr);
        end;
        Result := True;
      end;

    ptmNone:
      Result := False;
  end;
end;
Delphi-Quellcode:
// Anwendungsbeispiel:

uses ..., GR32, PNGImage;

var
  PngImg: TPngObject;
  Bmp32: TBitmap32;

BEGIN
  Bmp32 := TBitmap32.Create;
  try
    PngImg := TPngObject.Create;
    try
      PngImg.LoadFromFile(ExtractFilePath(ParamStr(0)) + 'test.png');
      // oder PngImg.LoadFromResource(...); etc.
      PNGToBitmap32(Bmp32, PngImg);
    finally
      PngImg.Free;
    end;

    Bmp32.Draw(...);

  finally
    Bmp32.Free;
  end;
end;
END.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:56 Uhr.

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