Удивительно, но в Unity в течение многих лет единственный способ просто масштабировать настоящий PNG — это использовать очень замечательную библиотеку http://wiki.unity3d.com
Пример ниже
Как масштабировать PNG с помощью функций Unity5? Теперь должен быть способ с новым пользовательским интерфейсом и так далее.
Итак, масштабирование реальных пикселей (например, в Color[]
) или буквально файла PNG, возможно, загруженного из сети.
(Кстати, если вы новичок в Unity, вызов Resize
не имеет отношения к делу. Он просто изменяет размер массива.)
public WebCamTexture wct;
public void UseFamousLibraryToScale()
{
// take the photo. scale down to 256
// also crop to a central-square
WebCamTexture wct;
int oldW = wct.width; // NOTE example code assumes wider than high
int oldH = wct.height;
Texture2D photo = new Texture2D(oldW, oldH,
TextureFormat.ARGB32, false);
//consider WaitForEndOfFrame() before GetPixels
photo.SetPixels( 0,0,oldW,oldH, wct.GetPixels() );
photo.Apply();
int newH = 256;
int newW = Mathf.FloorToInt(
((float)newH/(float)oldH) * oldW );
// use a famous Unity library to scale
TextureScale.Bilinear(photo, newW,newH);
// crop to central square 256.256
int startAcross = (newW - 256)/2;
Color[] pix = photo.GetPixels(startAcross,0, 256,256);
photo = new Texture2D(256,256, TextureFormat.ARGB32, false);
photo.SetPixels(pix);
photo.Apply();
demoImage.texture = photo;
// consider WriteAllBytes(
// Application.persistentDataPath+"p.png",
// photo.EncodeToPNG()); etc
}
Кстати, мне пришло в голову, что я, вероятно, говорю здесь только об уменьшении масштаба (как вам часто приходится делать, чтобы опубликовать изображение, создать что-то на лету или что-то в этом роде). по размеру изображение; это бессмысленно с точки зрения качества.