C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Сохранение картинки, из вырезанной области формы
R@kot
  Отправлено: 11.02.2005, 01:46


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Народ, помогите! Требуется создать такую вот прогу: имеется форма с вырезанным посередине прямоугольником (т.е. в этом прямоугольнике видно всё, что находится за формой программы). Как вырезать прямоугольник я знаю:

CODE

HRGN MyRgn;
MyRgn = CreateRectRgn (0, 0, 500, 500);
CombineRgn (MyRgn, MyRgn, CreateRectRgn(100, 100, 400, 400), RGN_XOR);
SetWindowRgn (Handle, MyRgn, true);


Задача в том, чтобы можно было сохранять ту картинку, которая видна точно в вырезанном прямоугольнике. Если у кого есть какие-нибудь мысли по этому поводу — ПЛИЗ, напишите! smile.gif
full_lamer
Отправлено: 11.02.2005, 09:08


Машинист паровоза

Группа: Участник
Сообщений: 225



CODE

Form1->Canvas->CopyRect(TRect (300, 100, 400, 200), Form1->Canvas, TRect (100, 100, 200, 200));


Отредактировано full_lamer — 11/02/2005, 18:14
Sl@Sh
Отправлено: 11.02.2005, 18:47


Мастер участка

Группа: Участник
Сообщений: 383



QUOTE
CODE
Form1->Canvas->CopyRect(TRect (300, 100, 400, 200), Form1->Canvas, TRect (100, 100, 200, 200));


Мне кажеться тут будет другой результат

Думаю правильней будет так :
CODE

TCanvas *hDesk = new Graphics::TCanvas();
TRect cRect = Rect(Left + 100, Top + 100, Left + 400, Top + 400);
Graphics::TBitmap *Bmp = new Graphics::TBitmap();

try
{
  hDesk->Handle = GetDC(0);
  Bmp->Width      = 300;
  Bmp->Height     = 300;
  Bmp->Canvas->CopyRect(cRect, hDesk, cRect);
}
__finally
{
  Bmp->SaveToFile("tmp.bmp");
  delete Bmp;
  delete hDesk;
}


Отредактировано Sl@Sh — 11/02/2005, 19:50
R@kot
Отправлено: 12.02.2005, 01:51


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Во-первых, всем спасибо, что откликнулись! biggrin.gif Однако возникли некоторые проблемы:

full_lamer, приведённая строчка кода конечно прикольная, но откуда мне теперь изображение взять-то wink.gif ? Будь добр, напиши какой-нибудь примерчик, сохраняющий полученное изображение в файл.

Sl@Sh, у тебя все понятно написано, но вот результат немного огорчает: в результате выполнения кода получается полностью белая картинка (300х300) и всё sad.gif Как получить нормальное изображение экрана за формой?
Sl@Sh
Отправлено: 12.02.2005, 16:12


Мастер участка

Группа: Участник
Сообщений: 383



Извините, я поспешил и как говорится людей насмешил biggrin.gif

Картинка не белая, а вы просто наверное прогу в проводнике тестировали. Короче картинка как-бы смешена.

Напишите это :
CODE
Bmp->Canvas->CopyRect(Rect(0, 0, 300, 300), hDesk, cRect);


Вместо этого :
CODE
Bmp->Canvas->CopyRect(cRect, hDesk, cRect);


Должно работать.

Удачи !
R@kot
Отправлено: 13.02.2005, 01:37


Дежурный стрелочник

Группа: Участник
Сообщений: 32



Sl@Sh, спасибо большое! Теперь всё действительно работает! biggrin.gif

Вернуться в Вопросы программирования в C++Builder