Einzelnen Beitrag anzeigen

Benutzerbild von stOrM
stOrM

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

Re: Bitmap32 auf ZielBitmap32 malen

  Alt 30. Jul 2008, 10: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