![]() |
DEUTSCHE VERSION |
|
![]() |
Links | | | Forums | | | Comments | | | Report news |
![]() |
Chat | | | Polls | | | Newsticker | | | Archive |
![]() |
amiga-news.de Forum > Programmierung > BitMapScale | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2007-06-05, 22:30 h MaikG Posts: 5172 User |
Wie verwendet man BitmapScale? Ich habe ein Bild von über Datatypes geladen, unabhängig vom Bild möchte ich z.B. eine Bitmap mit 100x100 Pixeln. Ja, das folgende Programm macht Enforcer hits aber kein Bild. Ich denke da sind entweder Parameter die falsch sind oder ich muss wieder irgendwas als Pointer und nicht als Wert oder umgekehrt übergeben. Die Parameter mit Factor verstehe ich nicht. code:workbuf& = AllocVec& (1024, MEMF_PUBLIC& OR MEMF_CLEAR&) '---------- Bild laden --------- IF workbuf& THEN TAGLIST workbuf&, _ DTA_SourceType&, DTST_FILE&, _ DTA_GroupID&, GID_PICTURE&, _ PDTA_Screen&, mysc&, _ PDTA_Remap&, TRUE&, _ PDTA_DestMode&, 1&, _ TAG_END& dtobjekt& = NewDTObjectA& (SADD(Picture$ + CHR$(0)), workbuf&) IF dtobjekt& THEN gplayout& = AllocVec&(gpLayout_sizeof%, MEMF_PUBLIC& OR MEMF_CLEAR&) IF gplayout& THEN POKEL gplayout& + gpLayoutMethodID%, DTM_PROCLAYOUT& POKEL gplayout& + gpl_GInfo%, NULL& POKEL gplayout& + gpl_Initial%, TRUE& IF DoDTMethodA& (dtobjekt&, NULL&, NULL&, gplayout&) THEN TAGLIST workbuf&, _ PDTA_BitMapHeader&, VARPTR(bmheader&), _ PDTA_BitMap&, VARPTR(bitmapadr&), _ TAG_END& IF GetDTAttrsA& (dtobjekt&, workbuf&) = 2 THEN pwidth% = PEEKW(bmheader& + bmh_Width%):pheight% = PEEKW(bmheader& + bmh_Height%) tempbm& = AllocBitMap& (pwidth%+400, pheight%+400, 24&, NULL&, NULL&) TAGLIST workbuf&, _ bsa_SrcX%,0 ,_ bsa_SrcY%,0 ,_ bsa_SrcWidth%, pwidth%, _ bsa_SrcHeight%, pheight%,_ bsa_XSrcFactor%, 100,_ bsa_YSrcFactor%, 100,_ bsa_DestX%, 0,_ bsa_DestY%, 0,_ bsa_DestWidth%, VARPTR(destwidth%),_ bsa_DestHeight%,VARPTR(destheight%),_ bsa_XDestFactor%, 50,_ bsa_YDestFactor%, 50,_ bsa_SrcBitMap%, bitmapadr&, _ bsa_DestBitMap%, tempbm&,_ bsa_Flags%, Null&,_ TAG_END& BitMapScale(workbuf&) junk& = BltBitMapRastPort& (tempbm&, 0, 0, rp&, 112, 6+thetopborder%, destwidth%, destheight%, &HC0) FreeBitMap tempbm& END IF END IF FreeVec gplayout& END IF DisposeDTObject dtobjekt& END IF FreeVec workbuf& END IF [ - Answer - Quote - Direct link - ] |
2007-06-05, 23:30 h thomas Posts: 7721 User |
Zitat: Da hast du etwas falsch verstanden. BitMapScale nimmt keine Tag-Liste, sondern eine Struktur. Da muß sowas hin wie workbuf& = AllocVec (bsa_SizeOf) pokew workbuf& + bsa_SrcX%,0 pokew workbuf& + bsa_SrcY%,0 ... Zitat: Und wenn du schon unschlüssig bist, ob Pointer oder Werte richtig sind, dann solltest du dich wenigstens für eins entscheiden. Beides mischen kann nicht gehen. Tipp: Werte sind richtig. Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2007-06-05, 23:39 h thomas Posts: 7721 User |
Und wo wir schonmal dabei sind, Zitat: Das haut so auch nicht hin. Wenn du eine Bitmap mit einer Farbtiefe größer als 8 anlegen möchtest, dann mußt du bei den Flags das Pixelformat mit angeben. Und du mußt BMF_MINPLANES setzen, sonst bekommst du zumindest bei Cybergraphics trotzdem eine 8bit-Bitmap. In C sieht das so aus: AllocBitMap (width,height,24,BMF_MINPLANES|BMF_SPECIALFMT|SHIFT_PIXFMT(PIXFMT_RGB24),NULL); Dazu kommt noch, daß BitMapScale nur mit 8bit-Bitmaps funktioniert. Wenn du Truecolor-Bilder skalieren möchtest, solltest du ScalePixelArray oder die entsprechende Picasso96-Funktion benutzen. Hier ist noch ein Beispiel für BitMapScale in C: code:struct BitMap *scale_8bit (struct BitMap *srcbm,long srcw,long srch,long destw,long desth) { struct BitScaleArgs *bsargs; struct BitMap *destbm; if (destbm = AllocBitMap (destw,desth,GetBitMapAttr(srcbm,BMA_DEPTH),GetBitMapAttr(srcbm,BMA_FLAGS),srcbm)) { if (bsargs = AllocMem (sizeof (struct BitScaleArgs),MEMF_CLEAR)) { bsargs->bsa_SrcWidth = srcw; bsargs->bsa_SrcHeight = srch; bsargs->bsa_XSrcFactor = srcw; bsargs->bsa_XDestFactor = destw; bsargs->bsa_YSrcFactor = srch; bsargs->bsa_YDestFactor = desth; bsargs->bsa_SrcBitMap = srcbm; bsargs->bsa_DestBitMap = destbm; BitMapScale (bsargs); FreeMem (bsargs,sizeof (struct BitScaleArgs)); return (destbm); } FreeBitMap (destbm); } return (NULL); } Gruß Thomas -- Email: thomas-rapp@web.de Home: thomas-rapp.homepage.t-online.de/ [ - Answer - Quote - Direct link - ] |
2007-06-06, 09:56 h srupprecht Posts: 39 User |
@thomas: BS() funktioniert mit jeder BitMap Tiefe. [ - Answer - Quote - Direct link - ] |
2007-06-06, 10:06 h MaikG Posts: 5172 User |
Mh, Strucktur das war wohl sowas was verwendet wurde bevor man die Taglists erfunden hatte? Okay damit geht es und die Parameter hab ich auch kapiert. >Das haut so auch nicht hin. Wenn du eine Bitmap mit einer Farbtiefe >größer als 8 anlegen möchtest, dann mußt du bei den Flags das >Pixelformat mit angeben. Und du mußt BMF_MINPLANES setzen, sonst >bekommst du zumindest bei Cybergraphics trotzdem eine 8bit-Bitmap. Also bei 100% sieht das Bild so aus wie vorher, wird von den Datatypes für den Screen/Window vorgefertigt. >AllocBitMap (width,height,24,BMF_MINPLANES|BMF_SPECIALFMT|SHIFT_PIXFMT(PIXFMT_RGB24),NULL); Okay, werd ich korregieren. Hab gestern nur mit ein 8 Bit bild probiert, muss ich mal mehr reinschicken. [ - Answer - Quote - Direct link - ] |
2007-06-06, 11:34 h Der_Wanderer Posts: 1229 User |
@Thomas ScalePixelArray() funktioniert mit PixelArrays, BitMapScale() mit Bitmaps. Beide funktionieren mit 8, 16 und 24bit. Nur ScalePixelArray funktioniert nicht auf planaeren Daten, es muss LUT (8bit chunky), Hi oder True Color sein. -- Thilo Köhler, Author von: HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, TK AB3 Includes und viele mehr... Homepage: http://www.hd-rec.de [ - Answer - Quote - Direct link - ] |
2007-06-06, 11:38 h MaikG Posts: 5172 User |
Also ich hab die Routine so wie sie war(Alloc ohne FMT/BitMapScale) mit 24-Bit gestestet, es ging. Cyberguard hits kamen keine also müsste das doch so okay sein? [ - Answer - Quote - Direct link - ] |
2007-06-07, 10:02 h MaikG Posts: 5172 User |
Habs jetzt mit sehr vielen Bildern probiert, keine Probleme. Danke @all [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > BitMapScale | [ - Search - New posts - Register - Login - ] |
![]() |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved. |
![]() |