15 lines
879 B
TypeScript
15 lines
879 B
TypeScript
export function texturePixelsToRgba(source:Uint8Array,pixelCount:number,channels:number):Uint8Array{
|
|
if(!Number.isInteger(pixelCount)||pixelCount<0)throw new Error('纹理像素数量无效');
|
|
if(!Number.isInteger(channels)||channels<1||channels>4)throw new Error(`不支持 ${channels} 通道纹理`);
|
|
if(source.length<pixelCount*channels)throw new Error('纹理像素数据不完整');
|
|
const rgba=new Uint8Array(pixelCount*4);
|
|
for(let pixel=0;pixel<pixelCount;pixel+=1){
|
|
const sourceOffset=pixel*channels,targetOffset=pixel*4,red=source[sourceOffset];
|
|
rgba[targetOffset]=red;
|
|
rgba[targetOffset+1]=channels===1||channels===2?red:source[sourceOffset+1];
|
|
rgba[targetOffset+2]=channels===1||channels===2?red:source[sourceOffset+2];
|
|
rgba[targetOffset+3]=channels===2?source[sourceOffset+1]:channels===4?source[sourceOffset+3]:255;
|
|
}
|
|
return rgba;
|
|
}
|