AGB  ·  Datenschutz  ·  Impressum  







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

Image Problem???

Ein Thema von Bernd29bln · begonnen am 14. Nov 2005 · letzter Beitrag vom 24. Nov 2005
Antwort Antwort
Seite 1 von 2  1 2      
Bernd29bln

Registriert seit: 28. Feb 2005
Ort: Berlin
281 Beiträge
 
Delphi 7 Professional
 
#1

Image Problem???

  Alt 14. Nov 2005, 22:21
Hallo,

Ich möchte mir ,eine LED auf meiner Form machen. um nicht ständig die Bilder für an und aus zuladen, hab ich sie in ein bild gestopft.

Wie bekomme ich es nun hin ,daß meine Led das bild für on anzeigt.
Momentan zeit er immer beide LED´s an die sich im bild befinden.



Gruss Bernd
Angehängte Grafiken
Dateityp: bmp button_on_197.bmp (1,5 KB, 60x aufgerufen)
Bernd
Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen.
Sokrates
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Image Problem???

  Alt 15. Nov 2005, 00:46
Das einfachste ist, du lädst dieses Doppel-Bild zuerst in ein normales TBitmap, welches du im Creater der Form davor noch erzeugst. Und danach brauchst du nur noch mehr mittels der Api-Funktion "BitBlt" jeweils die erste Hälfte bzw. die zweite Hälfte dieses Bitmap auf das Image zu übertragen.

also für Teil-Bild1 so:

Delphi-Quellcode:
BitBlt(Image1.Canvas.Handle, 0, 0, FBitmap.Width div 2, FBitmap.Height,
       FBitmap.Canvas.Handle, 0, 0, SrcCopy);
bzw. so fürs Teil-Bild2:

Delphi-Quellcode:
BitBlt(Image1.Canvas.Handle, 0, 0, FBitmap.Width div 2, FBitmap.Height,
       FBitmap.Canvas.Handle, FBitmap.Width div 2, 0, SrcCopy);
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Bernd29bln

Registriert seit: 28. Feb 2005
Ort: Berlin
281 Beiträge
 
Delphi 7 Professional
 
#3

Re: Image Problem???

  Alt 15. Nov 2005, 01:07
Hallo,

Könnst mir das jemand näher erklären, hab damit noch nicht viel Erfahrung.

Gruss Bernd
Bernd
Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen.
Sokrates
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Image Problem???

  Alt 15. Nov 2005, 07:50
Also, wenn ich dich überhaupt richtig verstanden habe, dann hast du mittels irgendeines Grafikprogramms beide Zustands-Bilder des LED nebeneinanderer zu einem einzigen Bild zusammengebaut. Links das Bild für LED=OFF und rechts dasjenige für LED=ON. Mit dieser BitBlt-Funktion (deren Parameter du dir dann mal in der PSDK ansehen solltest; MSDN-Library durchsuchenBitBlt) kannst du nun jeden beliebigen Ausschnitt (also z.B. auch eine linke o. rechte Hälfte) dieses Doppelbildes in ein anderes Bild herüber kopieren, so wie ich das in den zwei Codezeilen im ersten Post mal kurz vormachte.



Normalerweise brauchst du die beiden Bilder aber erst überhaupt nicht zu einem einzigen zusammenzubauen. Wenn du noch eine TImageList mit auf die Form ziehst (und mal einen Doppelklick drauf machst), dann kannst du darin nämlich leicht beide Bilder gleichzeitig abspeichern. Bei Bedarf holst du dir dann mittels der GetMitmap-Methode jeweils eines davon heraus bzw. lädst es dann in ein weiteres einzelnes TImage rüber.
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Bernd29bln

Registriert seit: 28. Feb 2005
Ort: Berlin
281 Beiträge
 
Delphi 7 Professional
 
#5

Re: Image Problem???

  Alt 16. Nov 2005, 08:49
Hallo,

Ich hab es mal mal BitBlT ausprobiert , da passiert bei mir nix

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
 BitBlt(Image1.Canvas.Handle, 0, 0, PaintBox1.Width div 2, PaintBox1.Height,
       PaintBox1.Canvas.Handle, 0, 0, SrcCopy);

end;
Hab ich da noch was vergessen?

Gruss Bernd
Bernd
Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#6

Re: Image Problem???

  Alt 16. Nov 2005, 09:31
Du kopierst von einer Paintbox in ein Image, soll das so herum sein ?

Code:
BitBlt([color=#ff0000]Ziehl.Canvas.Handle[/color], 0, 0, PaintBox1.Width div 2, PaintBox1.Height,
       [color=#ff003f]Quelle.Canvas.Handle[/color], 0, 0, SrcCopy);
Ist das Bitmap in der Paintbox oder im Image und wohin soll es kopiert werden?

// Edit:

Ein Beispielcode:

Delphi-Quellcode:
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  // "Antiflacker" (für diesen Beispielcode nützlich - wegen dem Repaint)
  {Form1.} DoubleBuffered := True;

  // Groesse des 2. Images an Groesse von Bitmap in Image 1 anpassen
  Image2.Width := Image1.Width;
  Image2.Height := Image1.Height div 2;

  // Alle "Aus"-LEDs zeichnen lassen
  SetLEDs(Image1, Image2, 0);
end;

procedure TForm1.SetLEDs(QuellImage, ZiehlImage: TImage; LEDOn: Byte);
begin
  // Alle "Aus"-LEDs zeichnen
  BitBlt(
    ZiehlImage.Canvas.Handle,
    0,
    0,
    QuellImage.Width,
    QuellImage.Height div 2,
    QuellImage.Picture.Bitmap.Canvas.Handle,
    1,
    QuellImage.Height div 2,
    SrcCopy);

  if LEDOn > 0 then
  begin
    BitBlt(
      ZiehlImage.Canvas.Handle,
      0,
      0,
      (QuellImage.Width div 8) * LEDOn,
      QuellImage.Height div 2,
      QuellImage.Picture.Bitmap.Canvas.Handle,
      0,
      0,
      SrcCopy);
  end;

  // Ziehl-Image neu zeichnen lassen
  ZiehlImage.Repaint;
end;

procedure TForm1.TrackBar1Change(Sender: TObject);
begin
  // LEDs zeichnen wenn TrackBar1 geändert wird
  SetLEDs(Image1, Image2, TrackBar1.Position);
end;
Angehängte Dateien
Dateityp: zip beispiel_658.zip (5,6 KB, 14x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Image Problem???

  Alt 16. Nov 2005, 14:08
So eine PaintBox ist eigentlich bloß mehr für den eigentlichen Screen-Output selbst gedacht, und eignet eher weniger für ein anfängliches nur Parken eines Bildes. So ein einfaches TBitmap ist dafür also besser geeignet. Das erzeugst und lädst du dann zuerst noch im Creater der Form:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const AFileName = 'blablabla';
begin
  FBitmap := TBitmap.Create;
  FBitmap.LoadFromFile(AFileName);
end;
Dann ersetzt du in deinem letzten Post einfach die Paintbox durch dieses FBitmap und schon müsste es eigentlich funktionieren. Auch ein Image1.Repaint nach dem "BitBlt" möglichst nicht vergessen.


(Aber wie gesagt: Die Benutzung einer ImageList wäre in deiner Situation wohl das einfachste. Nötig gewesen wäre dann nämlich insgesamt immer nur so etwas:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject); // z.B. fürs Anschalten des LED
begin
  Image1.Canvas.FillRect(Image1.Canvas.ClipRect); // ~ Image.clear
  ImageList1.GetBitmap(0,Image1.Picture.Bitmap);
end;

bzw.

procedure TForm1.Button2Click(Sender: TObject); // z.B. fürs Ausschalten des LED
begin
  Image1.Canvas.FillRect(Image1.Canvas.ClipRect); // ~ Image.clear
  ImageList1.GetBitmap(1,Image1.Picture.Bitmap);
end;
Allerdings muss man ja das "BitBlt" in jedem Falle auch einmal kennen gelernt haben --> als eigene Ausrede, nicht sofort die ImageList erwähnt zu haben )
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Bernd29bln

Registriert seit: 28. Feb 2005
Ort: Berlin
281 Beiträge
 
Delphi 7 Professional
 
#8

Re: Image Problem???

  Alt 16. Nov 2005, 19:41
Hallo,

Vielen Dank für eure mühen.

Funcktioniert fantastich . Mal noch ne Frage zum Code von turboPASCAL, wie bekommt man die Bilder übereinander , also so das man nur eine LED sehen Kann ?

Gruss Bernd
Bernd
Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen.
Sokrates
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: Image Problem???

  Alt 17. Nov 2005, 10:48
Zitat von Bernd29bln:
wie bekommt man die Bilder übereinander , also so das man nur eine LED sehen Kann ?
Wie ist das gemeint ?

Das erste BitBlt zeichnet alle "Aus"-LED's, das zweite BitBlt zeichnet darüber die LED's die "An" sein sollen.
Möchtest du die LED's einzeln An,-bzw. Ausschalten (zB. die Erste und die Letzte) so must du das zweite BitBlt in einer Schleife oder in einem Case-Statement ausführen und nur die LED(s) zeichnen lassen die "An" sein soll.

Zum Bleistift:
Delphi-Quellcode:
procedure TForm1.SetLEDs(QuellImage, ZiehlImage: TImage; LEDs: String);
var
  i: Byte;
  h,w: Integer;
begin
  // LEDs zeichnen
  for i := 1 to Length(LEDs) do
  begin
    if LEDs[i] <> '0'
      then h := 0
      else h := QuellImage.Height div 2;

    w := QuellImage.Width * (i-1);

    BitBlt(
      ZiehlImage.Canvas.Handle,
      w,
      0,
      QuellImage.Width * i,
      QuellImage.Height div 2,
      QuellImage.Picture.Bitmap.Canvas.Handle,
      0,
      h,
      SrcCopy);
  end;

  // Ziehl-Image neu zeichnen lassen
  ZiehlImage.Repaint;
end;

//Wenn die zwei mittleren leuchten sollen, Aufruf zB.:
SetLEDs(Image1, Image2, '00011000');
... auch als Anhang zu haben:
Angehängte Dateien
Dateityp: zip beispiel2_599.zip (2,7 KB, 9x aufgerufen)
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Bernd29bln

Registriert seit: 28. Feb 2005
Ort: Berlin
281 Beiträge
 
Delphi 7 Professional
 
#10

Re: Image Problem???

  Alt 18. Nov 2005, 00:08
HI TurboPascal,

Ich meinte es eher so, daß ich eine drei Fabige LED habe .
Dein beispiel 2 hatte ich mir schon aus beispiel 1 gebastelt, Ich habe es nur noch nicht hin bekommen eine LED in drei Farben anzeigen zulassen. Muss ich da Top und Left mit einbringen oder wie geht das?

Gruss Bernd
Bernd
Es ist keine Schande, nichts zu wissen, wohl aber, nichts lernen zu wollen.
Sokrates
  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 02:48 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