Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi PNGImage, lineto/Move mit Alpha? (https://www.delphipraxis.net/159444-pngimage-lineto-move-mit-alpha.html)

Memnarch 28. Mär 2011 16:20

PNGImage, lineto/Move mit Alpha?
 
Nabend,
Ne kleine Frage. Hab gerade nen PNGimage auf das der User zeichnen kann. Wenn ich normal zeichne mit Lineto etc habe ich keinen einfluss auf den Alpha kanal.
Immoment ist geplant im hintergrund nen zweites bild zu erstellen, dass den alphakanal in Graustufen enthält, sodass ich mit dem stift einmal auf Colorebene zeichne und einmal mit entsprechendem grauwert auf die Greyscale alpha map. Das veränderte rechteck wird dann in den alphakanal der Originalen TPNGImage gepackt.

Hab auch schon versucht eigene zeichen funktionen zu schreiben, aber irgendwie sind die nicht so das ware.
Jemand ne idee?

MFG
Memnarch

turboPASCAL 28. Mär 2011 17:30

AW: PNGImage, lineto/Move mit Alpha?
 
Kleine Gegenfrage, warum nutzt du nicht die GR32-Lib ?

Png-Image in ein TBitmap32 kopieren und munter mit Alphakanal und Co darauf herum malen...

Memnarch 28. Mär 2011 17:37

AW: PNGImage, lineto/Move mit Alpha?
 
ach Gr32Lib besitzt diese malfähigkeit?
Dan isse sklar wohin ich wechsel :D

MFG
Memnarch

turboPASCAL 28. Mär 2011 18:10

AW: PNGImage, lineto/Move mit Alpha?
 
Liste der Anhänge anzeigen (Anzahl: 2)
Jo, die kann sowas.

// Edit:
Delphi-Quellcode:
function SaveBitmap32ToPNGFile(FileName: string; srcbmp32: TBitmap32): bool;
begin
  Result := False;
  // todo:
  // Guckst du zu...
  // http://graphics32.org/news/newsgroups.php?art_group=graphics32.general&article_id=6918
end;
// Edit2:
Kleine Änderung am Beispiel

Memnarch 28. Mär 2011 18:39

AW: PNGImage, lineto/Move mit Alpha?
 
okay, demo angeguckt. Dort hast du mit einem Alphaeffect über das bild gemalt. Ist es auch möglich beim malen den alphachannel zu modifizieren?

Die farben sollen ja ganz normal aufgetragen werden, nur der alphachannel muss dabei verändert werden.

MFG
Memnarch

turboPASCAL 28. Mär 2011 19:24

AW: PNGImage, lineto/Move mit Alpha?
 
Der Alphachannel wird mit modifiziert. ;)

Memnarch 28. Mär 2011 20:05

AW: PNGImage, lineto/Move mit Alpha?
 
A gut, okay^^.

Das bild mus halt am ende semitransparente stellen haben(wen abgespeichert als file). Aber das scheint ja kein problem zu sein^^


MFG
Memnarch

Memnarch 29. Mär 2011 16:17

AW: PNGImage, lineto/Move mit Alpha?
 
Ah sehr schön. Habe es mir gerade angeguckt und wirklich sehr schöne Bibliothek, möcht ich scho nach dem austesten nich mehr missen :D.

Kleine frage noch, ist es möglich auch nur den Alphakanal zu manipulieren? Sodas ich wenn ich z.b eine Linie zeichne nicht die farben sondenr nur den Alphawert manipuliere.

MFG
Memnarch

Memnarch 3. Apr 2011 14:28

AW: PNGImage, lineto/Move mit Alpha?
 
Tschuldigt bitte wnen ich nochmal pushe, aber ich konnte zu der frage absolut nichts finden:

Kann ich eine linie zeichnen, bei der ich NUR den Alphakanal, nicht aber die Farben beeinflusse?

EDIT: ist halt nochimmer bei mir so gelößt, das ich zum reinen alpha manipulieren eine zweite bitmap im hintergrund hab auf der ich zeichne und die farbwert als alphawerte in doe vordergrundbitmap kopieren.

MFG
Memnarch

Bummi 3. Apr 2011 14:53

AW: PNGImage, lineto/Move mit Alpha?
 
nur als Anregung ....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  p:PByteArray;
  x,y:Integer;
  pI:TPngImage;
begin
  pi := TPngImage.Create;
  pi.LoadFromFile('C:\Bilder\IconCollection\ix_ap_all\128x128\shadow\about.png');
  for y := 0 to 100 do
    begin
      p := pi.AlphaScanline[y];
      for x := 0 to 100 do

      p^[x]:= Round(255 * (x * y) / 10000);

    end;
  image1.Picture.Assign(pi);
end;

Memnarch 3. Apr 2011 15:05

AW: PNGImage, lineto/Move mit Alpha?
 
mh okay, werde ich mir also doch selbst ne zeichen methode schreiben müssen wie?

MFG
Memnarch

turboPASCAL 3. Apr 2011 17:03

AW: PNGImage, lineto/Move mit Alpha?
 
:gruebel:

Wenn du den Alphakanal getrennt bearbeiten möchtest also ohne Einfluss auf das Bild dann ja. ( denk ich mal )

Oder ich verstehe dein Vorhaben nicht so recht. *schulterzuck*

Namenloser 3. Apr 2011 17:52

AW: PNGImage, lineto/Move mit Alpha?
 
Du könntest eventuell eine eigene Combine-Routine schreiben, die nur den Alpha-Channel verändert, und dann die ganz normalen Zeichenroutinen verwenden → siehe GR32_Blend.pas. Wird aber wahrscheinlich etwas „dirty“, da die Combine-Routinen in einem fixen Array gespeichert sind, das so aussieht:

Delphi-Quellcode:
type
  TCombineMode = (cmBlend, cmMerge);

{…}

var

{…}

{ Function Variables }
  CombineReg: TCombineReg;
  CombineMem: TCombineMem;

  BlendReg: TBlendReg;
  BlendMem: TBlendMem;

{…}

  MergeReg: TBlendReg;
  MergeMem: TBlendMem;

{…}

const
  BLEND_MEM: array[TCombineMode] of ^TBlendMem = ((@@BlendMem),(@@MergeMem));
  {…}
Ehrlich gesagt blicke ich gerade selbst nicht durch, was genau der Unterschied zwischen den Blend-, Combine- und Merge-Funktionen ist.

Jedenfalls existieren sie alle in verschiedenen Varianten und werden dynamisch zugewiesen, je nach verfügbaren CPU-Features.

Eventuell könntest du dort rumpfuschen, und die Funktionszeiger auf eine eigene Funktion umbiegen.

Nur so ne Idee...

Memnarch 3. Apr 2011 17:56

AW: PNGImage, lineto/Move mit Alpha?
 
@turbopascal: ganz genau, getrentes bearbeiten ;)

@NamenLozer: muss ich mir mal angucken.


MFG
Memnarch


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz