Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
image.include : image_Create{}
#1
Hallo,

Also da ich für Zeichenfunktionen in Tincture auch den Drawbuffer anlege und den transparent haben möchte frage ich mich wie ich das anstellen muß damit ich dann auch nur mein neu gezeichnetes im Mixbuffer zusammenmischen kann.

zum erzeugen eines Buffers mach ich folgendes:

[ab3]Function.l tnc_CreateBuffer{}

buf.l = image_GetFree{}
succ.l = image_Create{buf,AppContext\projectA\width,AppContext\projectA\height,0,$0}
If succ
Function Return buf
Else
Function Return False
EndIf
End Function[/ab3]

ein experimentelles image_DrawLineAA{AppContext\projectA\imgDrawbuffer,x,y,xwidth,yheight,argb,thick}
wird auch anstandslos gezeichnet

allerdings wird beim mischen in ein bestehendes Bild das schwarz ( $0) auch gezeichnet...

[ab3]Function.l tnc_MixBuffers{imageID.l,x.l,y.l,width.l,height.l,imageID2.l,mode.l,value.l}

*rp.RastPort = image_GetRPPtr{imageID2}
If value > 255 Then value = 255
image_FancyBlit{imageID,x,y,width,height,*rp,mode,value}
End Function[/ab3]

[ab3]tnc_DrawLine{10,10,100,100,$ffffff,5}
tnc_MixBuffers{AppContext\projectA\imgDrawbuffer,0,0,AppContext\projectA\width,@@
AppContext\projectA\height,AppContext\projectA\imgMixbuffer,#image_blitmode_alpha,255} ; Mische Puffer zusammen[/ab3]

was muß ich anstellen damit ich das transparent blitten kann ?
Zitieren
#2
Die image.include ist nicht geeignet, um für ein Grafikprogram den Puffer bereits zu stellen. Du solltest ein eigenes Puffer System schreiben. Ursprünglich war das mal zwar das Ziel, aber die AmigaOS API ist historisch bedingt zu verkorkst als dass du damit glücklich werden würdest. Ist auch nicht weiter schwer:
[ab3]Newtype.ARGB
A.b,R.b,G.b,B.b
End Newtype

Function.l tnc_CreateBuffer{}

*buff.ARGB = AllocVec_(#MEMF_ANY,,AppContext\projectA\width,AppContext\projectA\height*sizeof.ARGB)
; *buff irgendwo hin retten, am besten in das Project
Function Return *buff><Null

End Function[/ab3]

Statt Fancy Blit programmierst du dir das mixen selbst. Evtl. nehme ich das in die ab3support.library auf, wenn du das nutzen würdest. Wäre dann auch später nativ auf PPC.

Zu deiner eigentlichen Frage:
Du kannst nicht transparent Blitten weil dein Bild keinen Alpha Kanal hat.

Du wirst nicht drumherum kommen ALLE Zeichenfunktionen selbst zu schreiben. Du kannst AmigaOS API *NICHT* dafür benutzen, da sie kein Konzept von Alpha Kanal hat. Du kannst dir ab und zu funktionalität "ausborgen", z.B. für Font Rendering, wirst aber alles Pixelweise durchkneten müssen um den gewünschten Effekt zu haben.
Deshalb rate ich dir auch von dem Gebrauch einer AmigaOS Bitmap aus Puffer ab. Du kannst dann keinerlei RastPort Funktionen mehr benutzen (RectFill, Line, BltBmapRastPort) etc. aber das sind falsche Freunde die dir am Ende nicht weiter helfen.

Möglicherweise möchstest du auch von 8bit Farbkanälen Abstand nehmen, und deshalb einen Abstraktions Layer zwischen schieben, sodass du später auch 16Bit oder Float Farbkanäle unterstützen kannst.

Ich wäre da gerne bereit auch zu helfen, aber geht nicht ohne Zugriff auf den Source.
Zitieren
#3
Aha, also doch alles selbst erledigen wie bei PfPaint bis auf die Funktionen die dann die image.include anbietet....
Zitieren
#4
Alles selbst erledigen ja, wie bei PfPaint, nein ;-)

Die image.include bietet dir einiges, aber wenn deine Ansprüche steigen wird es schwierig. Ausserdem habe ich lernen müssen, dass man eigentlich nicht mit AmigaOS Bitmaps arbeiten kann. Da bin ich bei AROS böse auf die Nase gefallen. Also lieber alles was von AmigaOS gemanaged wird meiden, nur da wo es wirklich Arbeit abnimmt, z.B. font Rendering. Und selbst da wäre man mit ttenigne.library wohl besser bedient, da das Ergebnis vorhersehbarer ist.
Zitieren
#5
Na gut, dann lösch ich das mal alles wieder raus, ist ja nicht schlimm...

Mit bei PfPaint meinte ich nur die Vorgehensweise alles selbst zu schreiben :roll: Wink
Zitieren
#6
Grundsätzlich ist alles-selbst-schreiben keine gute Idee (siehe NIH Syndrome), da alles viel zu lange dauert. Leider ist das meiste was dir bei AmigaOS geboten wird nicht von ausreichender Qualität, sodass du am Ende doch besser fährst - nicht alles - aber vieles selbst zu schreiben, oder mit Kompromissen leben musst.
Zitieren
#7
Zitat:*buff.ARGB = AllocVec_(#MEMF_ANY,,AppContext\projectA\width,AppContext\projectA\height*sizeof.ARGB)

der war gut, das gehört wohl eher so:

*buff.ARGB = AllocVec_(AppContext\projectA\width*AppContext\projectA\height*sizeof.ARGB,#MEMF_ANY|#MEMF_CLEAR)

Ich werde mir wohl oder übel mal deine includes näher anschauen müßen, denn das Prinzip ist ja wohl das gleiche.
Zitieren
#8
Mal davon abgesehen das ich eigene Drawfunktionen implementieren soll, funktioniert das zeichnen doch auch direkt in images und dann das blitten/mixen

Hab mal die mauscoords beim zeichnen einer Linie genommen, funktioniert ganz gut

[ATTACHMENT NOT FOUND]
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste