AGB  ·  Datenschutz  ·  Impressum  







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

Icon in Image sw wenn Maus drüber Farbe

Ein Thema von Christian18 · begonnen am 24. Aug 2007 · letzter Beitrag vom 27. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#1

Icon in Image sw wenn Maus drüber Farbe

  Alt 24. Aug 2007, 16:17
Hallo,

ich habe eine Icon Datei. Diese lade ich in ein TImage. Ich möchte das Icon im Image nun Schaarz/Wiess angezeigt haben. Wenn ich mit der Maus darüber gehe, dann soll das Icon im Image Farbig werden. Aber langsam. Die Farbe soll nach und nach kommen. Wie kann ich sowas machen?

LG Chris
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#2

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 24. Aug 2007, 16:55
Das wäre so eine Art Farb-Morphing notwendig.
Man muss jeden Punkt vom RGB Farbraum in den HSV Farbraum umrechnen,
dann die Farbsättigung (Saturation) mit einem Faktor zwischen 0.0 und 1.0 multiplizieren
und dann wieder zurück in den RGB Farbraum wandeln.
http://www.delphipraxis.net/internal...ct.php?t=49179
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 24. Aug 2007, 16:58
Eine vielleicht etwas unelegantere Methode wäre sich das Originalbild zu merken und das Bild in s/w anzeigen und im OnEnter oder so dann das Originalbild anzeigen und im OnExit wieder s/w machen. Wenn du wissen willst wie man ein Bild schwarz weiß bekommt ohne HSV dann sag bescheid. Eventuell speichert man das s/w Bild auch damit man das Bild nicht dauernd neu s/w machen muss.

EDIT: Ich seh grad das es kein OnEnter und OnExit beim TImage gibt aber ich denke mal das wird sich notfalls nachrüsten lassen.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#4

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 25. Aug 2007, 09:41
Hallo,

ich habe das mal Probiert. Ich habe es seitens Software realisiert. Kann man die Hardware, z.b. die Grafikkarte noch miteinbinden? Weil das so ein bisschen lange dauert.

Hier der Code:

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Image1: TImage;
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Image1MouseEnter(Sender: TObject);
    function Mischen(Percent : Real) : TBitmap;
    procedure Timer1Timer(Sender: TObject);
  private
    Bitmap1 : TBitmap;
    Bitmap2 : TBitmap;
    Percent : Real;
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TFarbe = record
    Rot : Integer;
    Gruen : Integer;
    Blau : Integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
  var x, y : Integer;
      Farbe : TFarbe;
      Arith : Integer;
begin
  Timer1.Enabled:=False;

  Percent:=0;

  Bitmap1:=TBitmap.Create();
  Bitmap1.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Floppy.bmp');
  Bitmap2:=TBitmap.Create();
  Bitmap2.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Floppy.bmp');

  for x:=0 to Bitmap1.Width do
    begin
      for y:=0 to Bitmap1.Height do
        begin
          with Farbe do
            begin
              Rot:=GetRValue(Bitmap1.Canvas.Pixels[x, y]);
              Gruen:=GetGValue(Bitmap1.Canvas.Pixels[x, y]);
              Blau:=GetBValue(Bitmap1.Canvas.Pixels[x, y]);

              Arith:=Round((Rot + Gruen + Blau) / 3);
            end;
          Bitmap1.Canvas.Pixels[x, y]:=RGB(Arith, Arith, Arith);
        end;
    end;

  Image1.Picture.Bitmap:=Bitmap1;

  Form1.DoubleBuffered:=True;
end;

procedure TForm1.Image1MouseEnter(Sender: TObject);
begin
  Timer1.Enabled:=True;
end;

function TForm1.Mischen(Percent: Real) : TBitmap;
  var x, y : Integer;
      Farbe1 : TFarbe;
      Farbe2 : TFarbe;
      Farbe3 : TFarbe;
      Temp : TBitmap;
begin
  Temp:=TBitmap.Create();
  Temp.Width:=Bitmap1.Width;
  Temp.Height:=Bitmap1.Height;

  for x:=0 to Bitmap1.Width do
    begin
      for y:=0 to Bitmap1.Height do
        begin
          with Farbe1 do
            begin
              Rot:=GetRValue(Bitmap1.Canvas.Pixels[x, y]);
              Gruen:=GetGValue(Bitmap1.Canvas.Pixels[x, y]);
              Blau:=GetBValue(Bitmap1.Canvas.Pixels[x, y]);
            end;

          with Farbe2 do
            begin
              Rot:=GetRValue(Bitmap2.Canvas.Pixels[x, y]);
              Gruen:=GetGValue(Bitmap2.Canvas.Pixels[x, y]);
              Blau:=GetBValue(Bitmap2.Canvas.Pixels[x, y]);
            end;

          with Farbe3 do
            begin
              Rot:=Round(Farbe1.Rot + (Farbe2.Rot - Farbe1.Rot) * Percent);
              Gruen:=Round(Farbe1.Gruen + (Farbe2.Gruen - Farbe1.Gruen) * Percent);
              Blau:=Round(Farbe1.Blau + (Farbe2.Blau - Farbe1.Blau) * Percent);
            end;

          Temp.Canvas.Pixels[x, y]:=RGB(Farbe3.Rot, Farbe3.Gruen, Farbe3.Blau);
        end;
    end;
  Result:=Temp;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if Percent = 1 then
    begin
      Timer1.Enabled:=False;
    end
  else
    begin
      Percent:=Percent + 0.2;
      Image1.Picture.Graphic:=Mischen(Percent);
    end;
end;

end.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#5

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 25. Aug 2007, 13:35
Wenn ich mit der Maus über das Image gehe, dann soll das Bild Farbig werden. Das macht er ja auch schon. Aber wer soll das ein bisschen schneller machen. Was kann ich dagegen tun? Und es sollte keine Rolle spielen wie schnell die CPU arbeitet. Es soll dann auch allen PCs gleich schnell oder langsam eingeblendet werden.

MFG Chris
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#6

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 26. Aug 2007, 11:42
Hallo,

hat niemand eine Idee wie ich das schneller machen kann?

MFG Christian18
  Mit Zitat antworten Zitat
kabuco
(Gast)

n/a Beiträge
 
#7

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 26. Aug 2007, 11:48
Hallo,

warum machst du es nicht so, dass du zwei Icons verwendest. Du lädst erst das s/w Bild und im onEnter-Event lädst du das Farbbild.Dürfte auf jedenfall schneller sein als ständig zu rechnen! Die ICO-Dateien dürften auch nicht so groß sein, dass das massig an Rechen- und Speicherleistung benötigen würde.

Gruß kabuco

Edit: H A L T ! STOP! hatte nicht gesehen, dass das Bild eingeblendet werden sollte!
  Mit Zitat antworten Zitat
Benutzerbild von Garfield
Garfield

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

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 26. Aug 2007, 11:57
Zitat von Christian18:
hat niemand eine Idee wie ich das schneller machen kann?
Du benutzt einen Timer. Da kann man einen Interval einstellen.

Vielleicht hilft diese Seite weiter: http://www.efg2.com/Lab/Graphics/Colors/index.html
Gruss Garfield
Ubuntu 22.04: Laz2.2.2/FPC3.2.2 - VirtBox6.1+W10: D7PE, DXE5Prof
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 26. Aug 2007, 12:00
Kuck dir mal die Graphics32 Bibliothek an. Die Routinen dort drin sind recht performant implementiert.
  Mit Zitat antworten Zitat
Christian18

Registriert seit: 9. Dez 2003
Ort: Hamburg
1.279 Beiträge
 
#10

Re: Icon in Image sw wenn Maus drüber Farbe

  Alt 26. Aug 2007, 12:49
Zitat von Garfield:
Zitat von Christian18:
hat niemand eine Idee wie ich das schneller machen kann?
Du benutzt einen Timer. Da kann man einen Interval einstellen.

Vielleicht hilft diese Seite weiter: http://www.efg2.com/Lab/Graphics/Colors/index.html
Hallo,

ich habe das Intervall schon auf 1 gestellt!!!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:05 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