1
A
回答
0
由於BMP不是壓縮格式,這是個好主意嗎?
據推測,圖像尺寸,即使是在便攜式設備上更爲重要。
2
現在我不關心大小。只是想知道我可以將圖像數據寫入.bmp文件。
3
我不認爲iPhone在iPhone上支持BMP。也許有人寫了一個UIImage
的類別,保存到BMP,但我不知道任何。我想你必須從UIImage
得到位圖數據並自己寫,它是一種非常簡單的文件格式。你所要做的就是寫出標題,然後寫出未壓縮的數據。標題是名爲BITMAPINFOHEADER
的結構,請參閱MSDN。在Apple的Technical Q&A1509中描述了獲取UIImage
的位圖數據。
1
意識到這是舊的文章,但如果有人發現了它,像我一樣尋找一個解決方案。 我基本上需要將FTP UIImage作爲一個小的BMP,所以我在MonoTouch中入侵了這個粗糙的類。 我借了zxing.Bitmap.cs和Example 1 from wikipedia BMP article。它似乎工作。可能會做一些像AsBMP()或類似的擴展。 (我不知道Objective-C的等價物是什麼,但希望這是有幫助的人。)
using System;
using System.Drawing;
using System.Runtime.InteropServices;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
using MonoTouch.CoreGraphics;
public class BitmapFileRGBA8888
{
public byte[] Data; // data needs to be BGRA
public const int PixelDataOffset = 54;
public BitmapFileRGBA8888(UIImage image)
{
CGImage imageRef = image.CGImage;
int width = imageRef.Width;
int height = imageRef.Height;
Initialize((uint)width, (uint)height);
CGColorSpace colorSpace = CGColorSpace.CreateDeviceRGB();
IntPtr rawData = Marshal.AllocHGlobal(height*width*4);
CGContext context = new CGBitmapContext(
rawData, width, height, 8, 4*width, colorSpace, CGImageAlphaInfo.PremultipliedLast
);
context.DrawImage(new RectangleF(0.0f,0.0f,(float)width,(float)height),imageRef); // RGBA
byte[] pixelData = new byte[height*width*4];
Marshal.Copy(rawData,pixelData,0,pixelData.Length);
Marshal.FreeHGlobal(rawData);
int di = PixelDataOffset;
int si;
for (int y = 0; y < height; y++)
{
si = (height-y-1) * 4 * width;
for (int x = 0; x < width; x++)
{
CopyFlipPixel(pixelData, si, Data, di);
di += 4; // destination marchs forward
si += 4;
}
}
}
private void CopyFlipPixel(byte[] Src, int Src_offset, byte[] Dst, int Dst_offset)
{
int S = Src_offset;
int D = Dst_offset + 2;
Dst[D--] = Src[S++]; // R
Dst[D--] = Src[S++]; // G
Dst[D--] = Src[S++]; // B
Dst[Dst_offset+3] = Src[S]; // alpha
}
private void Initialize(uint W, uint H)
{
uint RawPixelDataSize = W * H * 4;
uint Size = RawPixelDataSize + 14 + 40;
Data = new byte[Size];
Data[0] = 0x42; Data[1] = 0x4D; // BITMAPFILEHEADER "BM"
SetLong(0x2, Size); // file size
SetLong(0xA, PixelDataOffset); // offset to pixel data
SetLong(0xE, 40); // bytes in DIB header (BITMAPINFOHEADER)
SetLong(0x12, W);
SetLong(0x16, H);
SetShort(0x1A, 1); // 1 plane
SetShort(0x1C, 32); // 32 bits
SetLong(0x22, RawPixelDataSize);
SetLong(0x26, 2835); // h/v pixels per meter device resolution
SetLong(0x2A, 2835);
}
private void SetShort(int Offset, UInt16 V)
{
var byts = BitConverter.GetBytes(V);
if (!BitConverter.IsLittleEndian) Array.Reverse(byts);
Array.Copy(byts,0,Data,Offset,byts.Length);
}
private void SetLong(int Offset, UInt32 V)
{
var byts = BitConverter.GetBytes(V);
if (!BitConverter.IsLittleEndian) Array.Reverse(byts);
Array.Copy(byts,0,Data,Offset,byts.Length);
}
} // END CLASS
基本上
var Bmp = new BitmapFileRGBA8888(TempImage);
FTP.UploadBin(Bmp.Data, "test.bmp"); // or just write as binary file
相關問題
- 1. 如何將面板保存爲BMP
- 2. 如何將「bmp」保存爲SD卡中的bmp文件?
- 3. 我如何將UIImage保存爲文件目錄中的BMP文件
- 4. 將UIImage保存爲Blob SQLite
- 5. 將UIscrollView保存爲Uiimage
- 6. 將UIImage保存爲NSUserDefaults
- 7. 將System.Drawing.Graphics保存爲png或bmp
- 8. 將CBitmap保存爲.bmp文件
- 9. 圖片保存爲bmp
- 10. 如何將UIImage保存到文件?
- 11. 如何將DIV元素保存爲jpg或bmp文件?
- 12. 如何用GDI +將圖像保存爲BMP/PNG/JPG?
- 13. 如何將圖像保存爲BMP格式?
- 14. 如何將uiview轉換爲uiimage並保存爲照片庫
- 15. iOS - 將UIImage保存爲灰度JPEG
- 16. 將UIImage保存爲核心數據
- 17. 將UIImage保存爲其他名稱
- 18. 將uilabel和uiimageview保存爲uiimage
- 19. 如何保存bmp圖像,matlab
- 20. 如何從ID2D1Bitmap保存BMP文件
- 21. 如何在iOS中將UIImage保存爲漸進式JPEG格式?
- 22. 如何將背景保存爲來自uiimagepickercontroller的UIimage
- 23. 面板上的C#spirograph ...如何保存爲BMP?
- 24. Android保存bmp圖像
- 25. SDL保存窗口,BMP
- 26. 保存BMP到字典C#
- 27. 如何加載tiff文件並將其保存爲vC++中的bmp
- 28. 使用C++將BMP保存爲PNG(VS 2010)FAST
- 29. python將RGBA圖像保存爲BMP文件
- 30. 將32位位圖保存爲C#中的1位.bmp文件
很公平,我希望有人用iPhone可以讓你知道。也許Apple DOES支持較舊的Windows映像格式 - 我不知道。祝你好運。 – pavium 2009-08-29 06:43:08
加入傢伙 - 如果你只想評論一個答案,每個答案下都有一個「添加評論」鏈接。正確使用這個網站並不困難,對我們所有人來說都更好。 – zoul 2009-08-29 06:53:12
好的。下次我會照顧這個。 – Yogini 2009-08-29 06:57:13