本文整理汇总了C#中System.Image.CalculatePixelByteSize方法的典型用法代码示例。如果您正苦于以下问题:C# Image.CalculatePixelByteSize方法的具体用法?C# Image.CalculatePixelByteSize怎么用?C# Image.CalculatePixelByteSize使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类System.Image
的用法示例。
在下文中一共展示了Image.CalculatePixelByteSize方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: init
protected virtual bool init(IDisposableResource parent, Image image, int width, int height, bool generateMipmaps, MultiSampleTypes multiSampleType, SurfaceFormats surfaceFormat, RenderTargetUsage renderTargetUsage, BufferUsages usage, bool isRenderTarget, bool lockable, Loader.LoadedCallbackMethod loadedCallback)
{
byte[][] mipmaps = null;
int[] mipmapSizes = null, mipmapPitches = null;
try
{
video = parent.FindParentOrSelfWithException<Video>();
if (isRenderTarget) generateMipmaps = false;
// load image data
if (image != null)
{
mipmaps = new byte[image.Mipmaps.Length][];
mipmapSizes = new int[image.Mipmaps.Length];
mipmapPitches = new int[image.Mipmaps.Length];
for (int i = 0; i != mipmaps.Length; ++i)
{
var imageMipmap = image.Mipmaps[i];
mipmaps[i] = image.Compressed ? imageMipmap.Data : imageMipmap.SwapRBColorChannels();
mipmapSizes[i] = imageMipmap.Data.Length;
mipmapPitches[i] = imageMipmap.Pitch;
}
Size = image.Size;
surfaceFormat = image.SurfaceFormat;
PixelByteSize = image.CalculatePixelByteSize();
}
else
{
if (width == 0 || height == 0) Debug.ThrowError("Texture2D", "Width or Height cannot be 0");
Size = new Size2(width, height);
PixelByteSize = Image.CalculatePixelByteSize((surfaceFormat == SurfaceFormats.Defualt ? Video.DefaultSurfaceFormat() : surfaceFormat), width, height);
}
TexelOffset = (1 / Size.ToVector2()) * .5f;
SizeF = Size.ToVector2();
// init texture
REIGN_D3DUSAGE nativeUsage = isRenderTarget ? REIGN_D3DUSAGE.RENDERTARGET : REIGN_D3DUSAGE.NONE;
REIGN_D3DPOOL nativePool = (mipmaps != null && !video.Caps.ExDevice) ? REIGN_D3DPOOL.MANAGED : REIGN_D3DPOOL.DEFAULT;
if (usage == BufferUsages.Read)
{
if (!isRenderTarget) Debug.ThrowError("Texture2D", "Only RenderTargets may be readable");
// NOTE: Staging texture and states will be created in the RenderTarget
}
if (usage == BufferUsages.Write)
{
if (mipmaps != null)
{
if (video.Caps.ExDevice) nativeUsage |= REIGN_D3DUSAGE.DYNAMIC;
}
else
{
nativeUsage |= REIGN_D3DUSAGE.DYNAMIC;
}
}
com = new Texture2DCom();
var error = com.Init(video.com, Size.Width, Size.Height, generateMipmaps, mipmaps, mipmapSizes, mipmapPitches, 0, nativePool, nativeUsage, video.surfaceFormat(surfaceFormat), isRenderTarget);
switch (error)
{
case TextureError.Texture: Debug.ThrowError("Texture2D", "Failed to create Texture2D"); break;
case TextureError.SystemTexture: Debug.ThrowError("Texture2D", "Failed to create System Texture2D"); break;
}
if (!video.Caps.ExDevice && nativePool != REIGN_D3DPOOL.MANAGED)
{
LostDevice_image = image;
LostDevice_width = width;
LostDevice_height = height;
LostDevice_generateMipmaps = generateMipmaps;
LostDevice_multiSampleType = multiSampleType;
LostDevice_surfaceFormat = surfaceFormat;
LostDevice_renderTargetUsage = renderTargetUsage;
LostDevice_usage = usage;
LostDevice_isRenderTarget = isRenderTarget;
LostDevice_lockable = lockable;
LostDevice_pool = nativePool;
}
if (nativePool == REIGN_D3DPOOL.DEFAULT && !video.Caps.ExDevice && !video.deviceReseting)
{
video.DeviceLost += deviceLost;
video.DeviceReset += deviceReset;
}
}
catch (Exception e)
{
FailedToLoad = true;
Loader.AddLoadableException(e);
Dispose();
if (loadedCallback != null) loadedCallback(this, false);
return false;
}
if (!isRenderTarget)
{
Loaded = true;
if (loadedCallback != null) loadedCallback(this, true);
}
return true;
//.........这里部分代码省略.........
示例2: init
protected unsafe virtual bool init(IDisposableResource parent, Image image, int width, int height, bool generateMipmaps, MultiSampleTypes multiSampleType, SurfaceFormats surfaceFormat, RenderTargetUsage renderTargetUsage, BufferUsages usage, bool isRenderTarget, Loader.LoadedCallbackMethod loadedCallback)
{
try
{
if (usage == BufferUsages.Read && !isRenderTarget) Debug.ThrowError("Texture2D", "Only RenderTargets may be readable");
video = parent.FindParentOrSelfWithException<Video>();
if (isRenderTarget) generateMipmaps = false;
uint texturesTEMP = 0;
GL.GenTextures(1, &texturesTEMP);
Texture = texturesTEMP;
if (Texture == 0) Debug.ThrowError("Texture2D", "Failed to Generate Texture");
GL.BindTexture(GL.TEXTURE_2D, Texture);
if (!generateMipmaps) GL.TexParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR);
else GL.TexParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR_MIPMAP_LINEAR);
GL.TexParameteri(GL.TEXTURE_2D, GL.TEXTURE_MAG_FILTER, GL.LINEAR);
hasMipmaps = false;
if (image != null)
{
var imageType = image.GetType();
#if NaCl
if (imageType == typeof(ImageBMPC))
#else
if (imageType == typeof(ImagePNG) || imageType == typeof(ImageJPG) || imageType == typeof(ImageBMP) || imageType == typeof(ImageBMPC))
#endif
{
uint pixelOrder, byteSizes;
int format = Video.surfaceFormat(surfaceFormat, out pixelOrder, out byteSizes);
var mipmap = image.Mipmaps[0];
fixed (byte* data = mipmap.Data)
{
GL.TexImage2D(GL.TEXTURE_2D, 0, format, mipmap.Size.Width, mipmap.Size.Height, 0, pixelOrder, byteSizes, data);
if (generateMipmaps)
{
hasMipmaps = true;
GL.GenerateMipmap(GL.TEXTURE_2D);
}
}
}
else if (imageType == typeof(ImageDDS) || imageType == typeof(ImagePVR))
{
if (image.Mipmaps.Length != Image.Mipmap.CalculateMipmapLvls(image.Size.Width, image.Size.Height))
{
Debug.ThrowError("Texture2D", "Compressed Textures require full mipmap chain");
}
GL.TexParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR_MIPMAP_LINEAR);
hasMipmaps = true;
bool compressed = false;
uint format = 0;
string errorType = null;
if (imageType == typeof(ImageDDS))
{
var imageDDS = (ImageDDS)image;
compressed = imageDDS.Compressed;
format = imageDDS.FormatGL;
errorType = "DDS";
}
else if (imageType == typeof(ImagePVR))
{
var imagePVR = (ImagePVR)image;
compressed = imagePVR.Compressed;
format = imagePVR.FormatGL;
errorType = "PVR";
}
if (compressed)
{
for (int i = 0; i < image.Mipmaps.Length; ++i)
{
var mipmap = image.Mipmaps[i];
fixed (byte* data = mipmap.Data)
{
// look up:: libtxc_dxtn.so for linux with mesa
GL.CompressedTexImage2D(GL.TEXTURE_2D, i, format, mipmap.Size.Width, mipmap.Size.Height, 0, mipmap.Data.Length, data);
}
}
}
else
{
Debug.ThrowError("Texture2D", "Loading uncompresed " + errorType + " textures not supported");
}
}
Size = image.Size;
PixelByteSize = image.CalculatePixelByteSize();
}
else
{
//GL.TexImage2D(GL.TEXTURE_2D, 0, Video.surfaceFormat(surfaceFormat), width, height, 0, GL.RGBA, GL.UNSIGNED_BYTE, IntPtr.Zero.ToPointer());
uint pixelOrder, byteSizes;
int format = Video.surfaceFormat(surfaceFormat, out pixelOrder, out byteSizes);
GL.TexImage2D(GL.TEXTURE_2D, 0, format, width, height, 0, pixelOrder, byteSizes, IntPtr.Zero.ToPointer());
if (generateMipmaps)
{
hasMipmaps = true;
//.........这里部分代码省略.........
示例3: init
protected virtual bool init(IDisposableResource parent, Image image, int width, int height, bool generateMipmaps, MultiSampleTypes multiSampleType, SurfaceFormats surfaceFormat, RenderTargetUsage renderTargetUsage, BufferUsages usage, bool isRenderTarget, Loader.LoadedCallbackMethod loadedCallback)
{
long[] mipmaps = null;
int[] mipmapSizes = null, mipmapPitches = null;
try
{
video = parent.FindParentOrSelfWithException<Video>();
if (isRenderTarget) generateMipmaps = false;
// load image data
if (image != null)
{
mipmaps = new long[image.Mipmaps.Length];
mipmapSizes = new int[image.Mipmaps.Length];
mipmapPitches = new int[image.Mipmaps.Length];
for (int i = 0; i != mipmaps.Length; ++i)
{
var imageMipmap = image.Mipmaps[i];
IntPtr mipmapPtr = Marshal.AllocHGlobal(imageMipmap.Data.Length);
Marshal.Copy(imageMipmap.Data, 0, mipmapPtr, imageMipmap.Data.Length);
mipmapSizes[i] = imageMipmap.Data.Length;
mipmapPitches[i] = imageMipmap.Pitch;
mipmaps[i] = mipmapPtr.ToInt64();
}
Size = image.Size;
surfaceFormat = image.SurfaceFormat;
PixelByteSize = image.CalculatePixelByteSize();
}
else
{
if (width == 0 || height == 0) Debug.ThrowError("Texture2D", "Width or Height cannot be 0");
Size = new Size2(width, height);
PixelByteSize = Image.CalculatePixelByteSize((surfaceFormat == SurfaceFormats.Defualt ? Video.DefaultSurfaceFormat() : surfaceFormat), width, height);
}
SizeF = Size.ToVector2();
// init texture
REIGN_D3D11_USAGE usageType = REIGN_D3D11_USAGE.DEFAULT;
REIGN_D3D11_CPU_ACCESS_FLAG cpuAccessFlags = (REIGN_D3D11_CPU_ACCESS_FLAG)0;
if (usage == BufferUsages.Read)
{
if (!isRenderTarget) Debug.ThrowError("Texture2D", "Only RenderTargets may be readable");
// NOTE: Staging texture and states will be created in the RenderTarget
//usageType = REIGN_D3D11_USAGE.STAGING;
//cpuAccessFlags = REIGN_D3D11_CPU_ACCESS_FLAG.READ;
}
if (usage == BufferUsages.Write)
{
usageType = REIGN_D3D11_USAGE.DYNAMIC;
cpuAccessFlags = REIGN_D3D11_CPU_ACCESS_FLAG.WRITE;
}
com = new Texture2DCom();
var error = com.Init(video.com, Size.Width, Size.Height, generateMipmaps, mipmaps != null, mipmaps, mipmapSizes, mipmapPitches, 0, video.surfaceFormat(surfaceFormat), usageType, cpuAccessFlags, isRenderTarget);
switch (error)
{
case TextureError.Texture: Debug.ThrowError("Texture2D", "Failed to create Texture2D"); break;
case TextureError.ShaderResourceView: Debug.ThrowError("Texture2D", "Failed to create ShaderResourceView"); break;
}
}
catch (Exception e)
{
FailedToLoad = true;
Loader.AddLoadableException(e);
Dispose();
if (loadedCallback != null) loadedCallback(this, false);
return false;
}
finally
{
if (mipmaps != null)
{
for (int i = 0; i != mipmaps.Length; ++i)
{
if (mipmaps[i] != 0) Marshal.FreeHGlobal(new IntPtr(mipmaps[i]));
}
}
}
if (!isRenderTarget)
{
Loaded = true;
if (loadedCallback != null) loadedCallback(this, true);
}
return true;
}