C# 如何在windows mobile中加载高分辨率图像
有谁能告诉我,如何使用C#在windows mobile中加载高分辨率图像。C# 如何在windows mobile中加载高分辨率图像,c#,.net,windows-mobile,C#,.net,Windows Mobile,有谁能告诉我,如何使用C#在windows mobile中加载高分辨率图像。 我从MemoryException中得到了。使用IImagingFactory和IImage,它们是WCE 5.0中引入的com对象 您必须为它们编写com包装器,或者使用已有的OpenNETCF 请参阅Chris Lorton关于alphablending和imaging factory类的博客文章,以及如何从.net使用它们。此代码显示了一个表单,在240x320的表单上有2mb jpg图像(3000x2000左右
我从MemoryException中得到了
。使用IImagingFactory和IImage,它们是WCE 5.0中引入的com对象
您必须为它们编写com包装器,或者使用已有的OpenNETCF
请参阅Chris Lorton关于alphablending和imaging factory类的博客文章,以及如何从.net使用它们。此代码显示了一个表单,在240x320的表单上有2mb jpg图像(3000x2000左右),没有任何例外。显然,您需要整理它来处理bmp和释放com对象等,但它确实有效,我已经在wm6.5模拟器上试用过
public partial class Form1 : Form
{
IImage smallImage;
Bitmap bmp = new Bitmap(240, 320);
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
IImage fullSizeImage;
IImagingFactory factory = new ImagingFactoryClass();
factory.CreateImageFromFile(@"\My Documents\My Pictures\luminous opera house.jpg", out fullSizeImage);
fullSizeImage.GetThumbnail(240, 320, out smallImage);
using (Graphics gfx = Graphics.FromImage(bmp))
{
IntPtr hdc = gfx.GetHdc();
try
{
smallImage.Draw(hdc, new Rectangle(0, 0, 240, 320), IntPtr.Zero);
}
finally
{
gfx.ReleaseHdc(hdc);
}
}
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawImage(bmp, 0, 0);
}
}
这包括加载大图像,然后放大部分图像。您可以包括您使用的代码吗?谢谢你的回复,我也在使用这个方法。。但问题是。。IntPtr hdcDest=gxBuffer.GetHdc();矩形dstRect=新矩形(左、上、右、下);imagingImage.Draw(hdcDest、ref-dstRect、IntPtr.Zero);gxBuffer.ReleaseHdc(hdcDest);e、 Graphics.DrawImage(backBuffer,0,0);我们在“imagingImage.Draw(hdcDest,ref-dstRect,IntPtr.Zero)”中获得了异常记忆;我们不会像包装位图那样使用(bitmap backBuffer=new bitmap(Width,Height,PixelFormat.Format32bppRgb)),bitmap backBuffer=new bitmap(Width,Height)PixelFormat.Format32bppRgb是否重要?感谢您的回复,我也在使用这种方法。。但问题是。。IntPtr hdcDest=gxBuffer.GetHdc();矩形dstRect=新矩形(左、上、右、下);imagingImage.Draw(hdcDest、ref-dstRect、IntPtr.Zero);gxBuffer.ReleaseHdc(hdcDest);e、 Graphics.DrawImage(backBuffer,0,0);我们在“imagingImage.Draw(hdcDest,ref-dstRect,IntPtr.Zero);”中得到了MemoryOfException;我们不会像包装位图那样,使用(bitmap backBuffer=new bitmap(Width,Height,PixelFormat.Format32bppRgb))替代,bitmap backBuffer=new bitmap(Width,Height)PixelFormat.Format32bppRgb是否重要?我不这样认为,检查你的dstRect中的大小,因为IImage希望右下角是绝对位置,而不是rect构造函数中的宽度和高度。我已经在我的WM应用程序中多次使用了你那里的代码,大多数时候我在绘图时遇到异常是在DSRECT设置不正确的时候。你要画的图像有多大?是什么格式的?谢谢你。。图像分辨率为3000X2000。我使用的是like this bitmap=新位图(宽度、高度);graphics=graphics.FromImage(位图);IntPtr hdcDest=graphics.GetHdc();矩形dstRect=新矩形(0,0,bitmap.width,bitmap.height);绘图(hdcDest,ref-dstRect,IntPtr.Zero);创建位图的宽度和高度值是多少?3000x2000?啊,我想我也有这个问题,使用一个大图像并将其大小绘制到一个小位图上,我仍然得到了OOM,但是如果使用IImage.GetThumbnail和要绘制大图像的较小位图的大小,它将为您调整大小。我使用的是opennetcf图像库,因此是ImageFactoryClass,但是我已经更改了对IImage.Draw的调用,以使用矩形和intptr,而不是RECT和null,因为我认为如果您不使用opennetcfwe没有使用“opennetcf”,fullSizeImage.GetThumbnail(240320,out smallImage);正如我看到的更大的图像像素,图像质量会下降。DrawAPI让OOMI知道您没有使用opennetcf,这就是我将调用更改为draw的原因。不管怎么说,它们只是com的包装。是的,调用缩略图将在图像缩小时对图像进行像素化。您需要在设备上进行图像大小调整吗?你不能适当地调整图片的大小并将其包含在你的应用程序中吗?我认为你应该看看这个问题和Chris Tacke的答案。也许您可以使用DIB加载大图像并进行处理以缩小它。再看看IImageDecoders,也许你需要使用一个比GetThumbnail更能调整大小的解码器。。。感谢您的回复,我们看到了,但是,如果我们这样做的话,任何其他选择或任何其他加载图像的方式看起来都不好。。