Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Gif bei verkleinerter Bildauflösung farblich stark veränder (https://www.delphipraxis.net/53287-gif-bei-verkleinerter-bildaufloesung-farblich-stark-veraender.html)

Hallo_Thomas 13. Sep 2005 22:01

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 1)
Irgendwie versag ich hier schon beim einfachsten, TBitmap32, undefinierter begriff.


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GR32_Image;

type

  TForm1 = class(TForm)
    Image321: TImage32;
     procedure CromaKey(ABitmap: TBitmap32; TrColor: TColor32);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure CromaKey(ABitmap: TBitmap32; TrColor: TColor32);
var
  P: PColor32;
  C: TColor32;
  I: Integer;
begin
  TrColor := TrColor and $00FFFFFF; // erase alpha, (just in case it has some)
  with ABitmap do
  begin
    P := PixelPtr[0, 0];
    for I := 0 to Width * Height - 1 do
    begin
      C := P^ and $00FFFFFF; // get RGB without alpha
      if C = TrColor then // is this pixel "transparent"?
        P^ := C; // write RGB with "transparent" alpha back into the SrcBitmap
      Inc(P); // proceed to the next pixel
    end;
  end;
end;

end.

dizzy 13. Sep 2005 23:10

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
uses GR32; ;)

Hallo_Thomas 14. Sep 2005 12:48

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
@Dizzy Danke, das hat mich schon 1, 2 schritte dem Ziele näher gebracht.


Wie wende ich diese Procedure auf TImage32 an?

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, GR32_Image,GR32;

type
  TForm1 = class(TForm)
    Image321: TImage32;
    procedure CromaKey(ABitmap: TBitmap32; TrColor: TColor32);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.CromaKey(ABitmap: TBitmap32; TrColor: TColor32);
var
  P: PColor32;
  C: TColor32;
  I: Integer;
begin
  TrColor := TrColor and $00FFFFFF; // erase alpha, (just in case it has some)
  with ABitmap do
  begin
    P := PixelPtr[0, 0];
    for I := 0 to Width * Height - 1 do
    begin
      C := P^ and $00FFFFFF; // get RGB without alpha
      if C = TrColor then // is this pixel "transparent"?
        P^ := C; // write RGB with "transparent" alpha back into the SrcBitmap
      Inc(P); // proceed to the next pixel
    end;
  end;
end;

end.

Delphi-Freak 14. Sep 2005 13:00

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Delphi-Quellcode:
CromaKey(Image321.Bitmap, $00FF00FF); //rosa soll transparent werden
Wenn ich das richtig verstanden habe, dann macht diese Funktion aus bestimmt farbigen Pixeln (z.B. rosa) ein transparentes Bild. Nur dann müsste noch folgende Zeile ersetzt werden:
Delphi-Quellcode:
        P^ := C; // write RGB with "transparent" alpha back into the SrcBitmap
durch
Delphi-Quellcode:
        P^ := C or $FF000000; // write RGB with "transparent" alpha back into the SrcBitmap
:gruebel:
Sonst wird doch der Alpha-Kanal von den rosa Pixeln weggegeben und nicht dazu...

LG, ich

Khabarakh 14. Sep 2005 13:07

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
:gruebel: Das ist doch der Sinn der Prozedur: jedem Pixel, das mit dem ColorKey übereinstimmt, wird der Alphakanalwert $00, also voll transparent, zugewiesen.

Delphi-Freak 14. Sep 2005 15:11

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Aaaah, jetzt ist der Groschen gefallen. $00 ist ganz transparenz, ich habe geglaubt $FF...

Hallo_Thomas 14. Sep 2005 15:47

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Ich glaub ich brauch hier echt noch eh bissl Starthilfe,, wie verbinde ich aber die Procedur mit dem Image32?

Delphi-Freak 14. Sep 2005 15:57

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Irgendwann lädst du ja dein Bild, ev. bei einem Button-Click oder im OnCreate-Event?

Khabarakh 14. Sep 2005 16:01

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Etwas grundlegendes:
Bevor du dich mit der GR32-Lib beschäftigst, solltest du die Grundlagen der VCL-Komponenten verstanden haben. TImage und TImage32 sind beide kein Speicher für Bilder, sondern "nur" Controls, die ein Hier im Forum suchenOffScreenBitmap auf ihrer Canvas darstellen. Dieser Irrglaube wird z.B. dadurch unterstützt, dass die vermeintliche TImage-Canvas einfach die Canvas des TBitmaps ist, der Programmierer aber glaubt, er arbeite mit dem Image selbst. Das Speichermedium für Bitmaps ist also TBitmap bzw. TBitmap32, diese kannst du über TImage.Picture.Bitmap bzw. TImage32.Bitmap32 ansprechen, und diese musst du auch an die diversen Grafikroutinen (wie diese hier) übergeben.

Hallo_Thomas 14. Sep 2005 16:23

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
@ Delphi-Freak

Es wird im OnCreate geladenund eins ist auch schon da, könnte manaber auch noch auf OnCreate umstellen.


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

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