2012-03-16 18 views
0

私はWindows Mobileで自分のアプリケーションの画像ボタンを作成しました。しかし、小さな問題があります。たとえば、画面の解像度が異なると、画像がコントロールに収まるように自動的にサイズが変更されません。これはどうすればできますか?画像ボタンCF.net

ありがとうございます。

これはあなたがのOnPaintなどの際に、画像を拡大縮小する必要があるのOnPaint機能のための私のコード

 Dim gxOff As Graphics 
     'Offscreen graphics 
     Dim imgRect As Rectangle 
     'image rectangle 
     Dim backBrush As Brush 
     'brush for filling a backcolor 
     If m_bmpOffscreen Is Nothing Then 
      'Bitmap for doublebuffering 
      m_bmpOffscreen = New Bitmap(Me.Width, Me.Height) 
     End If 

     gxOff = Graphics.FromImage(m_bmpOffscreen) 

     gxOff.Clear(Me.BackColor) 

     If Not bPushed Then 
      backBrush = New SolidBrush(Parent.BackColor) 
     Else 
      backBrush = New SolidBrush(Color.Black) 
      'change the background when it's pressed 
     End If 

     gxOff.FillRectangle(backBrush, Me.ClientRectangle) 

     If m_image IsNot Nothing Then 
      'Center the image relativelly to the control 
      Dim imageLeft As Integer = (Me.Width - m_image.Width)/2 
      Dim imageTop As Integer = (Me.Height - m_image.Height)/2 

      If Not bPushed Then 
       imgRect = New Rectangle(imageLeft, imageTop, m_image.Width, m_image.Height) 
      Else 
       'The button was pressed 
       'Shift the image by one pixel 
       imgRect = New Rectangle(imageLeft + 1, imageTop + 1, m_image.Width, m_image.Height) 
      End If 
      'Set transparent key 
      Dim imageAttr As New Imaging.ImageAttributes() 
      imageAttr.SetColorKey(BackgroundImageColor(m_image), BackgroundImageColor(m_image)) 
      'Draw image 
      gxOff.DrawImage(m_image, imgRect, 0, 0, m_image.Width, m_image.Height, GraphicsUnit.Pixel, imageAttr) 
     End If 

     If bPushed Then 
      'The button was pressed 
      'Prepare rectangle 
      Dim rc As Rectangle = Me.ClientRectangle 
      rc.Width -= 1 
      rc.Height -= 1 
      'Draw rectangle 
      gxOff.DrawRectangle(New Pen(Color.Black), rc) 
     End If 

     'Draw from the memory bitmap 
     e.Graphics.DrawImage(m_bmpOffscreen, 0, 0) 

     MyBase.OnPaint(e) 

答えて

0

です:上記の例

if (this._image != null) 
{      
    int x = (this.Width - this._image.Width)/2; 
    int y = (this.Height - this._image.Height)/2; 
    var imgRect = new Rectangle(x, y, this._image.Width, this._image.Height); 

    var imageAttr = new ImageAttributes(); 

    Color clr = this._image.GetPixel(0, 0); 
    imageAttr.SetColorKey(clr, clr); 

    gr2.DrawImage(this._image, imgRect, 0, 0, this._image.Width, this._image.Height, GraphicsUnit.Pixel, imageAttr); 
} 

は、最初に基づいて透明色で画像を描画する方法ですピクセル。 [編集]

あなたのコードの変更を見ては単純です

bool qvga = Screen.PrimaryScreen.Bounds.Height == 240 || Screen.PrimaryScreen.Bounds.Width == 240; 
int x = (this.Width - (qvga ? this._image.Width : this._image.Width * 2))/2; 
int y = (this.Height - (qvga ? this._image.Height : this._image.Height * 2))/2; 
var imgRect = new Rectangle(x, y, (qvga ? this._image.Width : this._image.Width * 2), (qvga ? this._image.Height : this._image.Height * 2)); 

:今、あなたは、第二の3行をammendする必要があります。私がコメントで説明したように:2つのメインウィンドウのモバイル解像度であるQVGAとVGAでは、そのイメージがQVGAサイズ用であると仮定します。私のコードを自分でVBに変換してください。私は書かように設定QVGAフラグ:今、私の上記のコードに基づいて、次のフラグammendに基づいて

bool qvga = Screen.PrimaryScreen.Bounds.Height == 240 || Screen.PrimaryScreen.Bounds.Width == 240; 

Dim imageLeft As Integer = (Me.Width - m_image.Width)/2 
Dim imageTop As Integer = (Me.Height - m_image.Height)/2 

し、このもの:

If Not bPushed Then 
    imgRect = New Rectangle(imageLeft, imageTop, m_image.Width, m_image.Height) 
Else 
    'The button was pressed 
    'Shift the image by one pixel 
imgRect = New Rectangle(imageLeft + 1, imageTop + 1, m_image.Width, m_image.Height) 

エンド

の場合
+0

私は上記のコードを入れてみましたが、didntの仕事をしました。 –

+0

あなたのコードを修正する必要があります。あなたは例を入れなかったので、私は例を挙げました。基本的なアイデアは - あなたのイメージを手作業で拡大縮小する必要があります。上記の例では、qvgaとvgaのみをサポートしています。イメージはqvga用で、vgaデバイス上でスケールアップされます。 – Marcin