Steve Cookson wrote:

Hi,

I'm sure I've just misunderstood something simple about images, but what have I done wrong here:

     my $loc_image = Wx::Image->new(560,20);
     my $loc_bmp;    # used to hold the bitmap.
     $loc_bmp=Wx::Bitmap->new( $loc_image );
     my $dc = Wx::PaintDC->new($self->{$loc_bmp});
     $dc->DrawRectangle(0, 0, 20, 20);
     if( $loc_bmp->Ok() ) {
            #  create a static bitmap called
    Ctl_Post_Exam_Videos_ImageViewer_Bmp that displays the
            #  selected image.
      $self->{Ctl_Post_Exam_Videos_ImageViewer_Bmp}=
    Wx::StaticBitmap->new($self->{Ctl_Post_Exam_Videos_Pane_1}, -1,
    $loc_bmp);
     }
     
$self->{Ctl_Post_Exam_Videos_Sizer_2}->Add($self->{Ctl_Post_Exam_Videos_ImageViewer_Bmp},
    0, 0, 0);

I expected to get a black rectangle 560 x 20 (from my $loc_image = Wx::Image->new(560,20);)

with the first 20px cut off (from $dc->DrawRectangle(0, 0, 20, 20);).

I get the first but not the second. Using ClientDC instead of PaintDC doesn't work either.

Regards

Steve


I think you are drawing a black rectangle on a black image. Try changing pen and/or brush colour:

   $dc->SetBrush( wxRED_BRUSH );
or
   my $pen = Wx::Pen->new( Wx::Colour->new(255,255,255), 2, wxSOLID);
   $dc->SetPen( $pen );

Also, if you plan on doing extensive drawing consider using a MemoryDC to draw bitmaps dynamically:

   $self->{BUFFER} = Wx::Bitmap->new(
       400,
       400,
       -1
   );
   $mdc = Wx::MemoryDC->new();
   $mdc->SelectObject($self->{BUFFER});
   $mdc->SetBackground(
       Wx::Brush->new(
           Wx::Colour->new( 255, 255, 255),
           wxSOLID
       )
   );
   $mdc->Clear();
   $mdc->SetBrush( wxBLACK_BRUSH );
   $mdc->SetPen( wxBLACK_PEN );
   $mdc->DrawCircle( 200,200, 195 );
   $mdc->SelectObject(wxNullBitmap); # deselect the bitmap out of the DC

Also have a look at the OnPaint event. I find drawing on a Panel within the OnPaint event to be a powerfull replacement of StaticBitmap

Cheers,
Huub

Reply via email to