我正在編輯一個位圖來優化它的OCR掃描。我需要做的事情之一是將圖像旋轉270度。我正在使用以下代碼:試圖旋轉位圖沒有成功
Matrix matrix = new Matrix();
matrix.PostRotate (270);
canvas.DrawBitmap(alteredBitmap, matrix, paint);
顯然,這對我不起作用。有人能指出我錯在哪裏嗎? 位圖來自byte[]
。
我正在編輯一個位圖來優化它的OCR掃描。我需要做的事情之一是將圖像旋轉270度。我正在使用以下代碼:試圖旋轉位圖沒有成功
Matrix matrix = new Matrix();
matrix.PostRotate (270);
canvas.DrawBitmap(alteredBitmap, matrix, paint);
顯然,這對我不起作用。有人能指出我錯在哪裏嗎? 位圖來自byte[]
。
這種方法一直爲我工作
Matrix matrix = new Matrix();
//myBitmap is the bitmap which is to be rotated
matrix.postRotate(rotateDegree);
Bitmap bitmap = Bitmap.createBitmap(myBitmap, 0, 0, myBitmap.getWidth(), myBitmap.getHeight(), matrix, true);//Rotated Bitmap
那麼如果你有從URL生成該位,繼續使用此功能
public Bitmap decodeBitmap(File f) {
try {
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeStream(new FileInputStream(f), null, o);
//The new size we want to scale to
final int REQUIRED_SIZE = 490;
//Find the correct scale value. It should be the power of 2.
int scale = 1;
while (o.outWidth/scale/2 >= REQUIRED_SIZE && o.outHeight/scale/2 >= REQUIRED_SIZE)
scale *= 2;
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
} catch (FileNotFoundException e) {
}
return null;
}
問題是,如果我創建另一個我超過了內存 –
你是否從一個文件得到這個位圖,如果是的,那麼你需要正確解碼以減小其大小以避免內存泄漏 –
您可以提供文檔或snipet代碼嗎? –
這是代碼段的我用在我的項目中旋轉byte[]
。它收到並返回byte[]
,但通過刪除最後5行代碼,它將返回Bitmap
。它的工作原理奇觀:
public async Task<byte[]> RotateImage(byte[] source, int rotation)
{
//This is optional, use it to reduce your images a little
var options = new BitmapFactory.Options();
options.InJustDecodeBounds = false;
options.InSampleSize = 2;
var bitmap = await BitmapFactory.DecodeByteArrayAsync(source, 0, source.Length, options);
Matrix matrix = new Matrix();
matrix.PostRotate(rotation);
var rotated = Bitmap.CreateBitmap(bitmap, 0, 0, bitmap.Width, bitmap.Height, matrix, true);
var stream = new MemoryStream();
await rotated.CompressAsync(Bitmap.CompressFormat.Jpeg, 100, stream);
var result = stream.ToArray();
await stream.FlushAsync();
return result;
}
所有awaitable呼叫具有非異步同行,所以這可以被轉換以阻止方式的重大問題不運行。請注意,刪除options
變量可能會導致OutOfMemoryException
,因此請確保在刪除之前知道您正在執行的操作。
定義「不起作用」。它崩潰了嗎?它不顯示任何東西嗎?它顯示位圖,但沒有旋轉? – Jason
我沒有在Xamarin上工作,但我已經在C#中旋轉了圖像。在C#中,我需要重新計算旋轉圖像的步幅,因爲如果將圖像的寬度旋轉90/270度,則會更改圖像的寬度 –
@Jason不起作用=不旋轉圖像 –