不用 Pixels 如何在一个Canvas拷贝一条直线到另一Canvas

解决方案 »

  1.   

    Canvas.CopyRect(目标Canvas的ClipRect,源Canvas, 源Canvas的ClipRect
      

  2.   

    我试过CopyRect能拷贝一个区域,不能拷贝一条线
      

  3.   

    我这儿有一段BCB的代码,应当能解决你的问题:
    void __fastcall TForm1::Button3Click(TObject *Sender)
    {
      int x, y;
      int Amplitude;
      float Period;
      BYTE ImageData[256][256], *LinePtr;  Image1->Picture->Bitmap = new Graphics::TBitmap;
      Image1->Picture->Bitmap->PixelFormat = pf24bit;
      Image1->Picture->Bitmap->Width = 256;
      Image1->Picture->Bitmap->Height = 256;
      for (y=0; y<=255; y++)
         for (x=0; x<=255; x++)
        {
            Amplitude = 64*(255-y)/255;
            Period = 100*sqrt(1/(1+(exp(0.013*x)*exp(0.027*x)/400)));
            ImageData[x][y] = Amplitude*sin(2*M_PI/Period*x)+128;
         }
          // Copy the image data to TBitmap
          for (y=0; y<=255; y++)
          {
            LinePtr = (BYTE *) Image1->Picture->Bitmap->ScanLine[y];
            for (x=0; x<=255; x++)
            {
               LinePtr[x*3]   = ImageData[x][y];       // Red
               LinePtr[x*3+1] = ImageData[x][y];       // Green
               LinePtr[x*3+2] = ImageData[x][y];       // Blue
             }
      }
      Image1->Refresh();
    }
      

  4.   

    不用pix,可以用ScanLine啊,速度相当快。