amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Amiga, AmigaOS 4 > 2 PPM-Bilder mit transparenz mischen [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2006-02-16, 10:47 h

Ralf27
Posts: 2779
User
Ich hab hier zwei unterschiedlich große PPM-Bilder die ich mit transparenz mischen möchte.

Ich hab es schon mit ppmcomp versucht, weil ja ppmmix leider zwei gleich große Bilder benötigt. Aber leider ist bis jetzt nichts richtiges rausgekommen. Dabei ist auch zu bedenken das ein PPM 650MB hat, das andere 2MB. Transparenz sollte ca. 50% betragen.

Wie mach ich das am besten mit ppmcomp oder mit ppmmix, wenn ich die Bilder gleich groß mache? Leider hat das auch mit ppmmix etwas fehlgeschlagen, wenn ich testweise zwei gleich große Bilder benutze:

ppmmix >neu.ppm 0.5 erstes.ppm zweites.ppm


Wenn möglich sollte das kleinere Bild ins größere mit interpolation eingerechnet werden...

Ne Idee? :dance3:
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2006-02-16, 11:07 h

Palgucker
Posts: 1342
User
@ Ralf27

Mit pnmscale das kleinere Bild vergrössern ? Wäre zumindest mein erster Gedanke.

mfg Palgucker

[ - Answer - Quote - Direct link - ]

2006-02-16, 17:20 h

Palgucker
Posts: 1342
User
Nachdem mein erster Gedanke wohl wieder am Speicher scheitert, hab ich noch einen.
Ein Script könnte ja die PPM's sozusagen "Zeilenweise" auslesen und jede Zeile als PPM zwischenspeichern und mit pnmscale sowie ppmmix bearbeiten und die Raw-Daten einem Ergebnis.ppm zufügen.
Habe mal so ein Script erstellt und es scheint ganz gut zu klappen.
"Leider" scaliert es nur integer - das macht auch ppmmix. Aber du kannst es ja mit 2 gleichgrossen Bildern probieren.
Nur sollte das zu mappende Bild nicht grösser sein, als das "Ausgangs.ppm", dann wird nicht alles "gemischt". Aber ich bin zu faul das zu ändern. ;)
Den "Mixfaktor" kannst Du oben im Script ändern. Und etwas Gedult wirst Du wohl benötigen.

code:
/* PPMMix.rexx */
Parse Arg Opts
Parse Value Opts with BigPPM " " ScalePPM " " OutPPM
If Words(Opts) ~=3 Then Do
say "mixppm.rexx Bigppm Scaleppm Outppm "
Exit
End
Mixfactor=0.5
SCZ=0 ; SCZM=-1
TempPPM="T:Temp.ppm"
Temp2PPM="T:Temp2.ppm"
TempscalePPM="T:TempScale.ppm"
MixPPM="T:Mix.ppm"
call CheckPPM()
BigPPMLen=SUBWORD(STATEF(BigPPM),2,1)
ScalePPMLen=SUBWORD(STATEF(ScalePPM),2,1)
BigW=GetWidth(BigPPM)
BiGH=GetHeight(BigPPM)
ScaW=GetWidth(ScalePPM)
ScaH=GetHeight(ScalePPM)
call GetRawStart(BigPPM BigW BigH BigPPMLen)
call GetRawStart(ScalePPM ScaW ScaH ScalePPMLen)
Call WriteHeader()
SCF = ScaH /BigH
Do Dl=1 To BigH
Wr=Writech(STDOUT,'0d1b5b4b'x ||"Bearbeite Zeile "|| Dl ||" ("|| Trunc(100/(BigH/Dl),1)||"%)" )
Call WriteTempPPM(TempPPM 1)
If BigW~=ScaW Then Do
Address Command "pnmscale -width " BigW " -height 1 " TempPPM ">"TempscalePPM
End
Else Do
Address Command "copy " TempPPM " to " TempScalePPM
End

Call WriteTempPPM(Temp2PPM 0)
Address Command "ppmmix " mixfactor Temp2PPM TempscalePPM ">" MixPPM
MixPPMLen=SUBWORD(STATEF(MixPPM),2,1)
call GetRawStart(MixPPM BigW 1 MixPPMLen)
Call AddOut()
End
Address Command "Delete T:#?.ppm quiet"
Exit

CheckPPM:
Do DL = 1 To 2
File=SubWord(Opts,Dl,1)
Call Open(File,File,R)
If ReadCh(File,2)~="P6" Then Do
Say File ||" ist kein PPM"
Exit
End
Cl=Close(File)
END
Return

GetWidth:
Parse Arg File
Call Open(File,File,R)
Rl=ReadLn(File)
X=SubWord(ReadLn(File),1,1)
Cl=Close(File)
Return(X)

GetHeight:
Parse Arg File
Call Open(File,File,R)
Rl=ReadLn(File);Rl=ReadLn(File)
If Words(RL)=2 Then Do
Y=SubWord(Rl,2,1)
End
Else Do
Y=SubWord(ReadLn(File),1,1)
End
Cl=Close(File)
Return(Y)

GetRawStart:
Parse Arg Opts
Parse Value Opts with  File " " Width " " Height " " Len
Call Open(File,File,R)
RPos=Seek(File,-(Width*Height*3),End)
Return()

WriteHeader:
Call Open(OutPPM,OutPPM,W)
Wr=WriteLn(OutPPM,"P6")
Wr=WriteLn(OutPPM,BigW||" "||BigH)
Wr=WriteLn(OutPPM,"255")
Cl=Close(OutPPM)
Return()

WriteTempPPM:
Parse Arg Opts
Parse Value Opts with Temp " " Flag
If Flag=1 Then Do
   SCZ=SCZ+SCF
   If SCZ%1 ~= SCZM%1 & SCZ%1~=ScaH Then Do
   Call Open(Temp,Temp,W)
   Wr=WriteLn(Temp,"P6")
   Wr=WriteLn(Temp,ScaW||" "||"1")
   Wr=WriteLn(Temp,"255")
   Wr=WriteCh(Temp,Readch(ScalePPM,ScaW*3))
   Cl=Close(Temp)
   SCZM=SCZ
   End
End
Else Do
Call Open(Temp,Temp,W)
   Wr=WriteLn(Temp,"P6")
   Wr=WriteLn(Temp,BigW||" "||"1")
   Wr=WriteLn(Temp,"255")
   Wr=WriteCh(Temp,Readch(BigPPM,BigW*3))
   Cl=Close(Temp)
End
Return()

AddOut:
Call Open(OutPPM,OutPPM,A)
Wr=Writech(OutPPM,Readch(File,BigW*3))
Cl=Close(File)
Cl=Close(OutPPM)
Return()


mfg Palgucker

Hoffe jetzt gehts

[ Dieser Beitrag wurde von Palgucker am 16.02.2006 um 20:34 Uhr geändert. ]

[ - Answer - Quote - Direct link - ]

2006-02-16, 21:06 h

Ralf27
Posts: 2779
User
@Palgucker:

Danke für deine Hilfe bei meinem Problem.

Ich denk mir mal das ppmmix das Bild nicht integer scaliert, da es das Bild überhaupt nicht scaliert. Es braucht zwei gleich große, was ja das Problem ist. ppmcomp würde scaliert, aber ob es jetzt interpoliert oder nicht, ist mir jetzt nicht bekannt.

Ich werde das Programm später mal bei mir auf dem Rechner testen. Ich war ja auch schon am überlegen ob ich dafür extra ein Prog schreiben soll...

Das Problem ist ja, das mein Mosaikbild ca. 650MB hat und das Referenzbild, das ich mit Transparenz drüberlegen möchte, ca. 2MB hat. Wenn ich da jetzt nicht interpoliere, dann sieht es vermutlich nicht gerade gut aus. Aber ich möchte das Optimum aus meiner Kiste holen, da das ganze später als Poster von einem Fotolabor ausgedruckt wird und dann später als Hochzeitsgeschenk herhalten soll. :D
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2006-02-19, 17:50 h

Ralf27
Posts: 2779
User
Hab es eben getestet:

Nach 3 Stunden war ich durch, aber leider halt nicht interpoliert.

Wie bekomme ich das denn nur richtig hin? Leider sind halt die Dateien etwas groß...

Also, wie bekommt man das am besten mit z.b. den net-pbm-paket gebacken?
--
http://www.alternativercomputerclub.de.vu

[ - Answer - Quote - Direct link - ]

2006-02-19, 19:16 h

Palgucker
Posts: 1342
User
@ Ralf27

Zitat:
Ich denk mir mal das ppmmix das Bild nicht integer scaliert, da es das Bild überhaupt nicht scaliert...


Da habe ich mich "verschriebverschreibt ". I-) Ich meinte natürlich pnmscale, was ebenfalls integer scaliert.
Und da ist auch das Hauptproblem. Etwas zu verkleinern ist eben eine ganz andere "Geschichte", wie etwas ( auch noch um Faktoren >2 ) zu vergrössern. Ich weiss nun nicht, ob es im Postscriptbereich (BildzuPS) etwas gibt, das soetwas annähernd beherrscht, aber das vergrössern müsste eben mit einer Software gemacht werden, das eine gewisse Bildanalyse bereitstellt.

mfg Palgucker

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Amiga, AmigaOS 4 > 2 PPM-Bilder mit transparenz mischen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved.
.