我在Flash和openFrameworks中尝试了这个,但在两者中都遇到了同样的问题......
我正在构建一个由1000张图像组成的画布,然后我将最终图像导出为jpg
我想将它导出为600万像素的jpg或类似的东西,但是我的屏幕分辨率远低于此值,并且导出仅出现在我的屏幕尺寸上..
有没有办法解决这个问题?
...谢谢
答案 0 :(得分:2)
这很容易。您创建所需大小的BitmapData对象,然后以您需要的方式绘制所需的所有内容,然后使用JPEGEncoder和pwn对该位图数据进行编码。一个例子:
public function saveAsPNG():void {
if (frameset[0] == null) return;
var fr:FileReference = new FileReference();
var totalHeight:int = Math.ceil(Math.sqrt(totalFrames));
var iter:int = totalHeight;
if (iter * (iter - 1) >= totalFrames) totalHeight--;
var totalWidth:int = iter * baseRect.width;
totalHeight *= baseRect.height;
var dp:Point = new Point();
var bigBitmap:BitmapData = new BitmapData(totalWidth, totalHeight, true, 0);
for (var i:int = 0; i < totalFrames; i++) {
var j:int = Math.floor(i / iter);
var k:int = i - j * iter;
dp.x = k * baseRect.width;
dp.y = j * baseRect.height;
bigBitmap.copyPixels(frameset[i], baseRect, dp); // semi-square bitmap as a result
}
fr.save(PNGEncoder.encode(bigBitmap));
}
这需要一个名为“frameset”的BitmapDatas序列并将其拍在名为“bigBitmap”的单个BitmapData上,然后将其导出为PNG - 我使用此格式,因为我需要详细的透明度。由于源对象属于BitmapData类型,因此不涉及BitmapData.draw()
,而是BitmapData.copyPixels()
。