Delphi-PRAXiS

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 16:33


Gif bei verkleinerter Bildauflösung farblich stark veränder
 
Ich hab folgendes Problem, wenn ich mein transparentes Gif Bild verkleinerer, wird es immer dunkler(genauer gesagt, die Pixel werden ersetzt durch schwarze Pixel), dadurch wird das Bild immer unansehnlicher.

P.S. Ich verwende TImage

turboPASCAL 13. Sep 2005 16:53

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Weil GifImage keine Standard-Komponennte von Delphi ist, wäre es nett wenn du angeben würdest welche du verwendest.

PierreB 13. Sep 2005 17:14

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Zitat:

Zitat von turboPASCAL
Weil GifImage keine Standard-Komponennte von Delphi ist, wäre es nett wenn du angeben würdest welche du verwendest.

Zitat:

Zitat von Hallo_Thomas
P.S. Ich verwende TImage

:gruebel:

Robert Marquardt 13. Sep 2005 17:27

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Zitat:

Zitat von Hallo_Thomas
P.S. Ich verwende TImage

Das hat aber nichts zu sagen. Das GIF-Format wird bei TImage per Format-Pluugin nachgeruestet.
Da gibt es mehrere. Namentlich TGifImage oder TJvGifImage.


Womit wird eigentlich verkleinert? Das ist doch keine Eigneschaft von TImage.

Hallo_Thomas 13. Sep 2005 18:01

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
GifImage verwende ich, welche Lösung gibt es da noch,bei .bmp hab ich das Problem, das es bei veränderungen mit grösse zu Problemen bei der Transparens kommt

Delphi-Freak 13. Sep 2005 18:33

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Eine Windows-Bitmap (*.bmp) unterstützt grundsätzlich keine Transparenz. Und wenn du mit Filtern beim Vergrößern/Verkleinern arbeiten willst, dann empfehle ich dir Graphics 32. Da gibts nette Filter und viele Effekte, Transparenz-Unterstützung, gute Performance und vieles mehr.

LG, ich

Hallo_Thomas 13. Sep 2005 19:00

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Wie/Wo stelle ich denn bei timage32 die transparenzein?

Delphi-Freak 13. Sep 2005 19:07

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Such vielleicht mal in der Hilfe, da ist eh eine dabei. Ich habe nur leider Delphi jetzt nicht gestartet...
Wie meinst du das aber eigentlich. Die Transparenz vom ganzen Bild (ich glaube da ist was in den Demos dabei) oder nur ein Pixel oder beim Zeichnen von Linien etc. ???

Khabarakh 13. Sep 2005 19:18

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Falls das nicht klar ist: GR32 unterstützt keine Bittransparenz (ColorKey-Transparenz, z.B. bei Gifs und den 1st-Party Komponenten), sondern "echte" 8-Bit-Transparenz für jedes Pixel (+RGB = 32-Bit Farbformat, z.B. bei PNG).

Für das Umrechnen gibt es allerdings eine Funktion auf der GR32-Website:
Delphi-Quellcode:
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;

Hallo_Thomas 13. Sep 2005 20:15

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Ist mir irgendwie noch unklar wie ich das anwende, gibt es ein Beispielprogramm vieleicht!

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.

Hallo_Thomas 14. Sep 2005 16:24

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Zitat:

Zitat von Khabarakh
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.

Ich steh im moment wahrscheinlich etwas auf dem Schlauch, aber wie übergeb ich die?

Delphi-Freak 14. Sep 2005 16:30

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Wie ich schon geschrieben habe: Im OnCreate-Event nachdem du das Bild geladen hast:
Delphi-Quellcode:
CromaKey(Image321.Bitmap, $00FF00FF); //rosa soll transparent werden
Statt Image321 musst du ev. deinen eigenen Namen für das Bild einsetzen und den zweiten Parameter ggf. durch eine andere Farbe ersetzen.

Oder habe ich dich mit der Frage falsch verstanden :roll:

LG, ich

Hallo_Thomas 14. Sep 2005 22:47

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 1)
Keine Ahnung, irgenwie klappts nicht, hab das unten reingeschriebenins Programm, hab das Bild mit der Farbe $00FF00FF eingefärgt und
es auch mit folgender Zeile probiert

Delphi-Quellcode:
P^ := C or $FF000000;bzw P^ := C or $00000000;
aber irgendwie klappt es nicht

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
CromaKey(Image321.Bitmap, $00FF00FF);
end;

Khabarakh 15. Sep 2005 12:01

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Delphi-Quellcode:
P^ := C or $00;
:gruebel: ? Der Code ist so, wie ich ihn gepostet habe, vollkommen richtig.

Aber was hast du eigentlich? Es klappt doch alles :mrgreen: . Man kann den Alphakanal bei einem einzelnen Bitmap lediglich nicht auf dem Bildschirm sehen. Siehe auch

Hallo_Thomas 15. Sep 2005 12:25

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 1)
:oops: Das glaub ich Dir ja, :wall: nur schaff ich es irgendwie nich den Code so umzusetzen das mei Bildchen Transparent wird.


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);
    procedure FormCreate(Sender: TObject);
  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;

procedure TForm1.FormCreate(Sender: TObject);
begin
 CromaKey(Image321.Bitmap, $00FF00FF);
end;

end.

Hallo_Thomas 15. Sep 2005 12:50

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
@Khabarakh
Das "GR32 Extension Control Pack" find ich, alles was sich bei dem Link bei mir aufmacht ist der Microsoft Outlook Newsreader, der hat dann 5000 nachrichten bei mir reinkopiert , a 1 KB, irgendwie find ichs nichts.

Khabarakh 15. Sep 2005 13:03

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Wie gesagt, dein Code ist zu 100% in Ordnung, allen Pixeln wird der korrekte Alphawert zugewiesen.
Das Control-Pack findest du unter "19.6.2005", aber ich habe es nicht fertig gebracht, es zu installieren :stupid: (ist auch noch Alpha). Einfachere Lösung: Das Bitmap auf den bekannten Phtoshop-Grau-Weiß-gekachelten Hintergund kopieren. Warum willst du dir die Transparenz denn überhaupt anzeigen lassen, es geht doch nur ums Verkleinern der Grafik?

Hallo_Thomas 15. Sep 2005 15:24

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 1)
Was mache ich dann verkehrt, das Bild, das rosa müsste doch weg sein!(Siehe Bild)

Khabarakh 15. Sep 2005 18:14

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Wie gesagt, TImage32 blendet das Bitmap nicht mit dem Hintergrund, du siehst also auch die voll transparenten Stellen! Die Pixel haben den richtigen Alphawert, er wird nur beim Anzeigen ignoriert. Kannst du bitte genau beschreiben, was dein letztendliches Ziel ist? Dann könnte ich dir besser helfen.

Hallo_Thomas 15. Sep 2005 18:33

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Ziel von mir ist es ein TImage32 Bild transparent darzustellen, also in dem Fall sollte während der Laufzeit(von mir aus auch eher), das rosa nicht zu sehen sein.

Khabarakh 15. Sep 2005 18:52

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Wenn hinter dem Image keine Komponenten sein sollen, gibt es kein Problem: Erstelle einen Layer mit der Hintergrundfarbe und darüber einen mit deinem Bild, dann hast du ein Pseudo-Blending mit dem Hintergrund.

Hallo_Thomas 15. Sep 2005 19:27

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Ok, dann hab ich ein Problem, ich Bilder, bei denen dahinter eine Komonente ist (Timage)

Khabarakh 15. Sep 2005 19:55

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Zitat:

Zitat von Hallo_Thomas
Ok, dann hab ich ein Problem, ich Bilder, bei denen dahinter eine Komonente ist (Timage)

Wie meinen *g* ?
Wenn nur ein TImage dahinter liegt, kannst du ja dessen Inhalt auch in das TImage321 integrieren.

dizzy 15. Sep 2005 21:04

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Um das nochmal in klaren Worten zu sagen: Du kannst niemals durch eine TImage32 Komponente hindurch auf darunterliegende Elemente sehen! Das ist ein Feature dass leider in der Form noch fehlt.

Falls das darunterliegende Bild die Begrenzung für das transparent darauf zuzeichnende Bild darstellt, so wäre der o.g Weg über die Layers-Eigenschaft von TImage32 der goldrichtige.


Gruss,
Fabian

Hallo_Thomas 15. Sep 2005 21:35

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Gut, da fang ich noch mal von vorn an, welche (besseren)Möglichkeiten gibt es ein Bild transparent darzustellen und es welches auch so vergrössert und verkleinert werden kann.

Bei bmp bilden hatte ich das Problem ,dass wenn ich es verkleinerte, die Transparenz spann.

bei gif Bildern war die transparenz Ok, nur das Bild selber wurde immer schwarzer.

Es muss doch eine möglichkeit geben, dass beides zu vereinen!?!


Also ich verwende, TImage & TGifImage.

Hallo_Thomas 17. Sep 2005 13:36

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 2)
Machs mal kurz, irgendwie als ich jtzt mal nenn Bildervergleich fürs Forum machen wollte, bin ich glaube auf ne Mögliche Lösung gestossen:


1.Man nimmt TJVSpecialImage
2.Stretch/Transparent :=True
3.Bei Transparent meckert der OI etwas rum, und er wills auch nicht wirklich transparent zeigen(Egal)
4.Nun einfach ne Kopie vom Bild machen(Fertig)


Irgendwie klappts, keine Ahnnung wie abers geht!

Vielleicht hat jemand eine eleganter Lösung?
Ein anderes Format oder ne Komonente?




Gruss Thomas

turboPASCAL 17. Sep 2005 14:00

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Du verwendest Delphi 7 ? Hast du auch die Updates instaliert ? ...liegt es daran ?

Ich kann nicht verstehen warum es bei dir mit den Bitmaps un der Transparenz beim verkleinern nicht funktionieren will. :gruebel:

Hallo_Thomas 17. Sep 2005 22:29

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Hatte das Update nicht für so wichtig gehalten, da ich in letzter Zeit mein computer wohl ein zwei.. neu gemacht hatte. Ok, Danke, ich hab da noch eins da.

Danke!!

Hallo_Thomas 25. Sep 2005 23:11

Re: Gif bei verkleinerter Bildauflösung farblich stark verä
 
Liste der Anhänge anzeigen (Anzahl: 3)
:pale: :?: Irgendwie wills trotz update nich klappen, habs jetzt auch mal auf 2005 probiert, will aber trotz allen nich funktionieren!
Das Problem ist, meines wissens nach Unterstützt nur JVSpecialImage die ganze sache, allerdings, streickt selbst dies Komponente wenn ich sie während der Laufzeit erzeuge! Inzwischen bin ich echt verzweifelt das das Problem angeht, eigentlich dachte ich es sei einfach Bilder zu verformen, doch im Moment scheint es mir in Delpi unmöglich zu sein, was ich mit jeden Fotobearbeitungsprogramm tolal easy is.

:duck: :wall: :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 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