我開發一個程序來擴展一些位圖圖像成爲我的瓷磚通知的一部分窗口 - 8應用如何調整位圖圖像是<200 KB,滿足瓷磚限制(WinRT的)
的圖塊的尺寸必須尺寸爲< 200KB且小於1024x1024 px。我可以使用縮放例程來根據需要調整源圖像的大小,以適應1024x1024 px尺寸限制。
如何更改源圖像以確保能夠滿足尺寸限制?
我的第一次嘗試是繼續縮小圖像,直到它清除大小閾值,並使用isTooBig = destFileStream.Size > MaxBytes
來確定大小。但是,下面的代碼會導致無限循環。我如何可靠地測量目標文件的大小?
bool isTooBig = true;
int count = 0;
while (isTooBig)
{
// create a stream from the file and decode the image
using (var sourceFileStream = await sourceFile.OpenAsync(Windows.Storage.FileAccessMode.Read))
using (var destFileStream = await destFile.OpenAsync(FileAccessMode.ReadWrite))
{
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(sourceFileStream);
BitmapEncoder enc = await BitmapEncoder.CreateForTranscodingAsync(destFileStream, decoder);
double h = decoder.OrientedPixelHeight;
double w = decoder.OrientedPixelWidth;
if (h > baselinesize || w > baselinesize)
{
uint scaledHeight, scaledWidth;
if (h >= w)
{
scaledHeight = (uint)baselinesize;
scaledWidth = (uint)((double)baselinesize * (w/h));
}
else
{
scaledWidth = (uint)baselinesize;
scaledHeight = (uint)((double)baselinesize * (h/w));
}
//Scale the bitmap to fit
enc.BitmapTransform.ScaledHeight = scaledHeight;
enc.BitmapTransform.ScaledWidth = scaledWidth;
}
// write out to the stream
await enc.FlushAsync();
await destFileStream.FlushAsync();
isTooBig = destFileStream.Size > MaxBytes;
baselinesize *= .90d * ((double)MaxBytes/(double)destFileStream.Size);
}
}
謝謝 - 我會調查這一點。我是位圖操作的新手 – cordialgerm