2009-03-21 3 views
0

Есть ли кто-нибудь, кто знает способ изменения размера изображений на .net 2.0 Compact Framework?Изменить размер изображений в Windows Mobile

Я хочу, чтобы иметь возможность получать изображения, сделанные с помощью камеры на телефоне, из памяти телефона, изменять их размер и затем загружать в веб-сервис, поэтому мне не нужно хранить измененные изображения на диске.

ответ

1

Простой VB.NET solution, или более complete treatment in C#. Google - ваш друг.

+0

Итак, о чем идет речь? Обе ссылки должны работать для CF. –

+0

Один для VB.net, по-видимому, не работает для jpg-изображений. C# -код предназначен для настольного приложения. – Zooking

+0

Код C# отлично работает с CF.NET 2.0 (если нет огромного прикрытия эмулятора устройства, блефующего нас всех). Почему бы вам не вырезать-вставить и попробовать? –

1

Graphics.FromImage должен работать на jpg-изображениях, однако вы можете столкнуться с проблемами памяти.

Посмотрите на это forum post для некоторых идей.

+0

Котировка сообщения с форума: «Я надеялся на пример .net, который вызывает DLL. Я никогда ничего не делал в среде CE с c или C++, и надеюсь, что этого не будет» Это заявление подходит для меня, спасибо, в любом случае. – Zooking

-1

ЭТО vb.net работает на Windows Mobile. Единственное ограничение: Большие Bitmaps вызывают OutOfMemoryException при открытии:

Private Function ResizedImage(ByVal image As Bitmap, ByVal maxW As Integer, ByVal maxH As Integer) As Bitmap 
    Dim divideByH, divideByW As Double 
    Dim width, height As Integer 
    divideByW = image.Width/maxW 
    divideByH = image.Height/maxH 
    If divideByW > 1 Or divideByH > 1 Then 
     If divideByW > divideByH Then 
      width = CInt(CDbl(image.Width)/divideByW) 
      height = CInt(CDbl(image.Height)/divideByW) 
     Else 
      width = CInt(CDbl(image.Width)/divideByH) 
      height = CInt(CDbl(image.Height)/divideByH) 
     End If 
     Dim scaled As New Bitmap(width, height) 
     Dim g As Graphics 
     g = Graphics.FromImage(scaled) 
     g.DrawImage(image, New Rectangle(0, 0, width, height), New Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel) 
     g.Dispose() 
     ResizedImage = scaled 
    Else 
     ResizedImage = image 
    End If 

End Function 
2

Это C# код я использую, чтобы изменить размер изображения в моем .NET CF 2.0 приложений:

public static Image ResizePicture(Image image, Size maxSize) 
{ 
    if(image == null) 
    throw new ArgumentNullException("image", "Null passed to ResizePictureToMaximum"); 

    if((image.Width > maxSize.Width) || (image.Height > maxSize.Height)) 
    { 
    Image resizedImage = new Bitmap(maxSize.Width, maxSize.Height); 

    using(Graphics graphics = Graphics.FromImage(resizedImage)) 
    { 
     graphics.Clear(Color.White); 

     float widthRatio = maxSize.Width/image.Width; 
     float heightRatio = maxSize.Height/image.Height; 

     int width = maxSize.Width; 
     int height = maxSize.Height; 

     if(widthRatio > heightRatio) 
     { 
     width = (int)Math.Ceiling(maxSize.Width * heightRatio); 
     } 
     else if(heightRatio > widthRatio) 
     { 
     height = (int)Math.Ceiling(maxSize.Height * widthRatio); 
     } 

     graphics.DrawImage(
     image, 
     new Rectangle(0, 0, width, height), 
     new Rectangle(0, 0, image.Width, image.Height), 
     GraphicsUnit.Pixel); 
    } 

    return resizedImage; 
    } 

    return image; 
} 
+0

Это выглядит интересно, к сожалению, я не смогу попробовать его до тех пор, пока через пару недель. BR, Ларр – Zooking

1

C# код отсутствует слепок в

float widthRatio = (float) maxSize.Width/image.Width; 

    float heightRatio = (float) maxSize.Height/image.Height; 

, а также для центрирования изображений:

graphics.DrawImage(image, new Rectangle((maxSize.Width - width)/2, (maxSize.Height -height)/2, width, height), new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel); 
Смежные вопросы