AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap32 auf ZielBitmap32 malen

Bitmap32 auf ZielBitmap32 malen

Ein Thema von stOrM · begonnen am 29. Jul 2008 · letzter Beitrag vom 1. Aug 2008
Antwort Antwort
Seite 1 von 6  1 23     Letzte » 
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#1

Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 15:19
Hallo, ich hab hier grad ein Verständnisproblem bei folgendem:

3 PNG's die in drei verschiedene Bitmap32 geladen werden sollen.

1. PNG = linker Bereich (linker Rahmen)
2. PNG = mittlerer Bereich (mittlerer Bereich der Grafik)
3. PNG = rechter Bereich (rechter Rahmen)

Grundidee ist folgende, ich würde gerne die 3 PNG's erstmal in 3 Bitmap32 Objekte konvertieren und danach auf eine bestimmte Größe bringen. Das klappt soweit sehr gut mit den Resamplern der Gr32.

Jetzt aber kommt das Problem, ich habe jetzt ein ZielBitmap32, in dem ich meine 3 teiligen Bitmap32 Objekte wieder zusammensetzen möchte, also erst den mittleren Bereich drauf zeichen und dann halt den linken sowie rechten Bereich auf das Zielbitmap32.

Das Problem ist egal was ich mache das Zielbitmap32 ist / bleibt immer leer?!

ich hatte es so versucht:

  OutMiddle.Draw(0, OutMiddle.Width, TheBar); // thebar = zielbitmap32; outmiddle = middlepart resampled Könnte mir jemand vielleicht kurz zeigen, wie ich das Zielbitmap32 mit den Teilen aus den 3 Bitmap32 Objekten zu einem zusammensetzen kann?

Vielen Dank
s!
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.659 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 15:26
Setzt du die Größe des Zielbitmaps bevor du darin zeichnest?
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.401 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 15:30
Und zeichnest Du sicher auf das richtige Bitmap mit den korrekten Koordinaten? Sieht etwas komisch aus.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 15:42
Zitat von Medium:
Setzt du die Größe des Zielbitmaps bevor du darin zeichnest?
Hmpf! ich glaub das hab ich vergessen mom!
Ok ist gesetzt nun, aber nu hab ich nen schwarzes Rechteck ohne Grafik drin
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.659 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 18:32
  OutMiddle.Draw(0, OutMiddle.Width, TheBar); // thebar = zielbitmap32; outmiddle = middlepart resampled Wie DeddyH schon sagte, sehen deine Koordinaten seltsam aus. Warum setzt du einen Wert mit Bezug auf die X-Achse für die Y-Position ein?

Ich vermute, dass die Zeile in etwa so lauten müsste:
  OutMiddle.Draw(OutLeft.Width+1, 0, TheBar);
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 19:58
Zitat von Medium:
  OutMiddle.Draw(0, OutMiddle.Width, TheBar); // thebar = zielbitmap32; outmiddle = middlepart resampled Wie DeddyH schon sagte, sehen deine Koordinaten seltsam aus. Warum setzt du einen Wert mit Bezug auf die X-Achse für die Y-Position ein?

Ich vermute, dass die Zeile in etwa so lauten müsste:
  OutMiddle.Draw(OutLeft.Width+1, 0, TheBar);
Moment mal gelich haben wir alle Klarheiten beseitigt
Jo ich glaub ich hab da was durcheinander gewürfelt, gleich wieder da
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#7

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 29. Jul 2008, 20:43
Ne also irgendwas läuft hier völlig schief.
Eigentlich sollte es so sein, ClientWidth sagen wir mal beträgt 400, die Grafik "Left" ist 2 px breit und ClientHeight hoch, gleiches gilt für die Grafik Outright...

Der Mittlere Bereich der Grafik in Outmiddle muss genau zwischen outleft + outright. Oder aber, eigentlich würde es glaub ich auch reichen erst Outmiddle in den gesamten ClientWidth Bereich zu zeichen und darauf dann outleft + outright, irgendwie klappt das aber nie...

Irgendwie ist mir bei Graphics32 unklar wer in welcher Reihenfolge wo was draufmalen muss.

Normalerweise würde ich folgerderßen vorgehen:

MittlereGrafik.Draw(0,0, Zielgrafik);
LinkeGrafik.Draw(0,0, Zielgrafik);
RechteGrafik.Draw(399, 0, Zielgrafik);

???
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.659 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 30. Jul 2008, 01:43
Zitat von stOrM:
MittlereGrafik.Draw(0,0, Zielgrafik);
LinkeGrafik.Draw(0,0, Zielgrafik);
RechteGrafik.Draw(399, 0, Zielgrafik);
Das kommt darauf an, wie breit MittlereGrafik ist. Wenn sie die volle Breite hat ist das okay (abgesehen davon, dass 399 besser 398 sein sollte (400px = 0..399). Ansonsten muss sie natürlich um die Breite von LinkeGrafik nach rechts verschoben werden.

Sind alle Teile passgenau, ist die Zeichenreihenfolge egal, ansonsten das zuletzt zeichnen, was "zu oberst" bzw. unverdeckt bleiben soll - alles andere wäre einfach unlogisch.

Spezifiziere doch nochmal "irgendwas läuft hier völlig schief". Was siehst du, und zeige doch mal den tatsächlichen Code incl. der Stellen, an denen du die Bitmaps createst, und vor allem auch wie du die Anzeige realisierst.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von stOrM
stOrM

Registriert seit: 7. Jun 2003
Ort: Mülheim an der Ruhr
434 Beiträge
 
Delphi 10.3 Rio
 
#9

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 30. Jul 2008, 09:21
Ok hier erstmal die Idee,
ich wollte mir die sehr komplexe Gradienterstellung sparen, die man benötigen würde um z.B. den Office2007 "orange" Gradient nachzubauen, die M$ benutzt für Selektionen in Menus oder anderen GUI Elementen. Daher dachte ich mir, könnte man ggf. in einem Grafikprogram malen, in 3 Teile unterteilen, also wie gesagt den linken, mittleren und rechten Teil und dann wenn nötig in den Canvas stretchen, z.B. in den Canvas einer Listbox und das dann als Selektionsrahmen benutzen...

Damit es relativ gut aussieht, dachte ich mir ich nehm mal PNG's als Ausgangsgrafik bastel mir die in Bitmap32 um damit ich den Resamplingfilter bentuzen kann und gut iss?!

Die PNG's im Anhang (die sind so eigentlich auch nicht richtig, normalerweise müßte ich die noch öfter unterteilen, da sonst im mittleren Bereich beim resizen, der Radial Gradient Effekt verloren geht, wäre aber schon froh wenns mal so klappen würde)...
Die Unterteilung war generell notwendig, da wenn nicht der runde Randbereich, der eine andere Farbe hat als der mittlere Teil natürlich mit gestreckt würde, was in dem Fall sehr übel aussieht.

Delphi-Quellcode:

  SelectionLeft := TBitmap32.Create;
  SelectionMiddle := TBitmap32.Create;
  SelectionRight := TBitmap32.Create;

  LoadPNGintoBitmap32(SelectionLeft, ExtractFilePath(ParamStr(0)) + 'left.png', Alpha);
  LoadPNGintoBitmap32(SelectionMiddle, ExtractFilePath(ParamStr(0)) + 'middle.png', Alpha);
  LoadPNGintoBitmap32(SelectionRight, ExtractFilePath(ParamStr(0)) + 'right.png', Alpha);

  OutLeft := TBitmap32.Create;
  Outleft.Width := 2;
  Outleft.Height := Listbox1.ItemHeight;

  OutMiddle := TBitmap32.Create;
  Outmiddle.Width := Listbox1.ClientWidth;
  Outmiddle.Height := Listbox1.ItemHeight;

  OutRight := TBitmap32.Create;
  OutRight.Width := 2;
  OutRight.Height := Listbox1.ItemHeight;

  // rescale srcBitmap32, dstBtimap32, hight, width)
  RescalePic(SelectionLeft, OutLeft, Listbox1.ItemHeight, 2);
  RescalePic(SelectionMiddle, OutMiddle, Listbox1.ItemHeight, Listbox1.ClientWidth);
  RescalePic(SelectionRight, OutRight, Listbox1.ItemHeight, 2);

  TheBar := TBitmap32.Create;
  TheBar.Width := Listbox1.ClientWidth;
  TheBar.Height := Listbox1.ItemHeight;

  OutMiddle.Draw(0, 0, OutLeft);
  OutMiddle.Draw(Listbox1.ClientWidth, 0, OutRight);
  TheBar.Draw(0, 0, OutMiddle);


{ später wollte ich dann, wenn benötigt

  TheBar.DrawTo(Listbox1.Canvas.Handle ,Rect.left, Rect.Top);


  benutzen um die zusammengesetze Grafik anzuzeigen.

}
Was ich sehe, wenn ich an Outmiddle etwas anders einstelle (Größe verkleinern, sowie Position, damit ich die linke und rechte Grafik neben, den Mittelteil malen kann und nicht drüber, dann sehe ich nur 2 schwarze Ränder) Wenn ich auf dem Mittelteil malen will, sehe ich nur die rechten oder linken Grafik auf den mittleren Bereich aber nie beide!)
Angehängte Dateien
Dateityp: zip png_134.zip (8,9 KB, 27x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.401 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 30. Jul 2008, 09:45
Ich weiß jetzt nicht, wie das bei TBitmap32 aussieht, aber es sollte doch im Prinzip so gehen:
- Setze Breite der Zielbitmap auf Gesamtbreite der 3 Quellbitmaps und Höhe auf die der höchsten Quellbitmap
- Zeichne an Position 0,0 die linke Quellbitmap
- Zeichne an Position linke Quellbitmap.Breite, 0 die mittlere
- Zeichne an Position Gesamtbreite(linke und mittlere) die rechte
- Speichere die Zielbitmap
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 13:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf