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? -- 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. -- 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 |
@ Ralf27Zitat: Da habe ich mich "verschriebverschreibt ". 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. |