PDA

Volledige versie bekijken : as allow smooting


theFlashWizard
%Europe/Berlin %654 %2006, 15:43
Hey mensjes,
Ik ontdekte laatst de allow smooting optie voor bitmaps in de library.
Door deze in te stellen kun je een plaatje op een mooie manier roteren en verkleinen zonder dat je pixels ziet.
Super functie natuurlijk, alleen aangezien ik zoveel mogelijk externe plaatjes gebruik vroeg ik mij af of je dit ook via as kon instellen.
Op die manier zou je bijv geen extra tumb versies van plaatjes nodig hebben.

Weet iemand dus of dat kan?

Ik ga me ondertussen even verdiepen in de nieuwe bitmap mogelijkheden van flash8 want dat had ik nog niet gedaan. Hoop dat daar zoiets bijstaad.

edit:
Ik heb even het voorbeeldje waarmee ik aant experimenteren ben toegevoegt.

Alvast bedankt!

pietertje
%Europe/Berlin %669 %2006, 16:04
nooit geprobeerd maar dit kwam ik tegen:

bitmapItem.allowSmoothing en _highquality = 2;

check de manual voor uitleg...

theFlashWizard
%Europe/Berlin %676 %2006, 16:14
highquality:
Deprecated since Flash Player 5. This property was deprecated in favor of _quality.

BitmapItem object:
Description
A BitmapItem object refers to a bitmap in the library of a document.

geen opties dus P)

_quality wel geprobeert:
var MCL:MovieClipLoader = new MovieClipLoader();
var MCO:Object = new Object();
MCL.addListener(MCO);
MCO.onLoadInit = function(target_mc:MovieClip){
target_mc._x = 0-target_mc._width/2;
target_mc._y = 0-target_mc._height/2;
target_mc._quality = "BEST";

target_mc._parent.onEnterFrame = function(){
this._xscale = this._yscale -= 1;
this._rotation += 1;
this._quality = "BEST";
this._parent._quality = "BEST";
} _highquality
}
MCL.loadClip("test.gif",mc.holder)
maar helaas geen effect P)

Macs
%Europe/Berlin %683 %2006, 16:24
De truc is volgens mij om een bitmap object van je foto te maken en dan hier de smooithing op toe te passen...
Hier staat een handige functie daarvoor:
http://www.kaourantin.net/2005/12/dynamically-loading-bitmaps-with.html

theFlashWizard
%Europe/Berlin %693 %2006, 16:38
whow ziet er goed uit! :)
ik ga em even goed uittesten :)

marcvz
%Europe/Berlin %713 %2006, 17:06
attachBitmap (MovieClip.attachBitmap method)
public attachBitmap(bmp:BitmapData, depth:Number, [pixelSnapping:String], [smoothing:Boolean]) : Void

theFlashWizard
%Europe/Berlin %765 %2006, 18:22
owke.. dat lukt opzich wel.. rotatie ziet er goed uit. alleen.. ik krijg et niet verkleint gewoon..
hoogstens gewoon lelijk verkleint of ik zie maar een gedeelte van het plaatje. bitmap.hieght en bitmap.width waren read-only. Dus daar schiet ik ook niks mee op. Iemand nog tips? (a)

Emveedee
%Europe/Berlin %832 %2006, 19:58
In een mc pleure en die vergroten of verkleinen misschien?

Of anders eens Bitmap._height ofzo proberen? (kweet niet of dat bestaat)

theFlashWizard
%Europe/Berlin %841 %2006, 20:11
jeej toch gelukt! :)

Ik heb er het volgende van gemaakt:
import flash.display.*;
function loadBitmapSmoothed(url:String, target:MovieClip,w:Number,h:Number) {
var bmc:MovieClip = target.createEmptyMovieClip("bmc",target.getNextHighestDepth());

var listener:Object = new Object();
listener.tmc = target;
listener.w = w;
listener.h = h;

listener.onLoadInit = function(mc:MovieClip) {
mc._visible = false;
var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
mc._parent.attachBitmap(bitmap, mc._parent.getNextHighestDepth(),"auto", true);
bitmap.draw(mc);
mc._parent._width = this.w;
mc._parent._height = this.h;
mc._parent._x = 0-this.w/2;
mc._parent._y = 0-this.h/2;
mc.removeMovieClip();
};
var loader:MovieClipLoader = new MovieClipLoader();
loader.addListener(listener);
loader.loadClip(url, bmc);
}
loadBitmapSmoothed("foto.jpg", mc.holder,300,200);


Emveedee, bitmap.height en .width zijn read-only en werkt dus niet
als de mc gewoon verkleint ziet het er nog niet uit.

septunas
%Europe/Berlin %831 %2007, 20:57
En wederom stijgt theFlashWizard in mijn achting ;)

Indien je reeds alles hebt geschreven, en het eenvoudigweg wil laten werken, volstaat het gewoon het volgende in uw 'onLoadInit' toe te voegen, vóór je andere code in de functie, en natuurlijk niet vergeten de display class te laden.

import flash.display.*;
listener.onLoadInit = function(mc:MovieClip) {
var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true);
mc.attachBitmap(bitmap, mc.getNextHighestDepth(),"auto", true);
bitmap.draw(mc);

// vanaf hier kan je verder terug de 'mc' aanspreken
// en draaien of schalen, zonder kwaliteitsverlies
};

Wel een stomme bug hé. Was hier al een hele poos naar op zoek. Bij Adobe zelf is daar niets over te vinden.

theFlashWizard
%Europe/Berlin %639 %2007, 16:20
Ik in jou achting stijgen terwijl je nu zo'n veel simpelere manier hebt gevonden... :P
Jij stijgt in ieder geval in mijn achting ;)

Sorry, over welke bug heb je het hier?

Hoop snel tijd te hebben uit te zoeken hoe dit gaat in as3.0 :)

BernardV
%Europe/Berlin %721 %2007, 18:19
@Septunas, het beste is nog even een tijdelijke MC aan te maken en daar het object in te laden, dan in de onLoadInit een bitmap in de mc._parent plaatsen en het geladen gedeelte verwijderen. Scheelt geheugen :)

//EDIT: Zie net dat tFW dat wel doet.. dus heb weinig tot niets gezegd :P

septunas
%Europe/Berlin %103 %2007, 03:28
Sorry, over welke bug heb je het hier?

Wel ja, dat de _quality property niet meer werkt. Mogelijk is dat bewust gedaan om een of andere vreemde reden, maar dan nog hadden ze dat dat op z'n minst mogen documenteren.