Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Заполнение TImage его же картинкой 
V
    Опции темы
livo
Дата 7.1.2011, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Мне нужно зарисовать канву имейджа изображением из свойства Bitmap. Можно ли это как-то сделать?

Следующий код вцелом справляется с задачей, но имхо это обход по корчам. Хотелось бы как-то проще.

Код

void __fastcall TForm1::RadioGroup1Click(TObject *Sender)
{
static Graphics::TBitmap *b=0;
 if(RadioGroup1->ItemIndex!=3 && b)
 {
   Image2->Picture->Bitmap->Assign(b);
   delete b;
   b=0;
 }
 switch(RadioGroup1->ItemIndex)
 {
   case 0:
     Image2->Center=0;
     Image2->Stretch=0;
     break;
   case 1:
     Image2->Center=1;
     Image2->Stretch=0;
     break;
   case 2:
     Image2->Center=0;
     Image2->Stretch=1;
     break;
   case 3:
     if(!b)b=new Graphics::TBitmap;
     Image2->Center=0;
     Image2->Stretch=0;
     b->Assign(Image2->Picture->Bitmap);
     Image2->Picture->Bitmap->Width=Image2->ClientWidth;
     Image2->Picture->Bitmap->Height=Image2->ClientHeight;
     Image2->Canvas->Brush->Bitmap=b;
     Image2->Canvas->FillRect(Image2->ClientRect);
     break;
 }
}


Это сообщение отредактировал(а) livo - 7.1.2011, 12:31
PM MAIL   Вверх
Rrader
  Дата 7.1.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 13
Всего: 191



Может так
Код

Image2->Canvas->Draw(0, 0, Image2->Picture->Bitmap);



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
livo
Дата 8.1.2011, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Мне нужно всю клиентскую область имейджа заполнить рисунком. Вроде как на рабочем столе в свойствах указать команду "замостить".
PM MAIL   Вверх
oldcode
Дата 8.1.2011, 06:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 8.10.2010

Репутация: 0
Всего: 0



Код
void __fastcall TForm1::FormShow(TObject *Sender)
{
  Graphics::TBitmap* b(new Graphics::TBitmap);
  b->LoadFromFile("e:\\super_puper_cool.bmp"); //ромашечка 19x19 pixels
  int w(b->Width);
  int h(b->Height);
  for (int y(0); y < Height; y += h) {
    for (int x(0); x < Width; x += w) {
      Image1->Canvas->Draw(x, y, b);
    }
  }
delete b;
}
 или присвоить Canvas->Brush->Bitmap нужный фон.

Добавлено через 11 минут и 14 секунд
ох и ленивый же народец , пипец... http://forum.vingrad.ru/forum/topic-305914.html
PM MAIL   Вверх
livo
Дата 8.1.2011, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



Цитата(oldcode @  8.1.2011,  06:05 Найти цитируемый пост)
ох и ленивый же народец , пипец...

я в поиске вводил TImage и в результатах ничего подходящего не обнаружил.

Цитата(oldcode @  8.1.2011,  06:05 Найти цитируемый пост)
или присвоить Canvas->Brush->Bitmap нужный фон.

так лучше.

А без постороннего объекта нельзя обойтись? В имейдже уже есть битмап; это его нужно отрисовать.
PM MAIL   Вверх
oldcode
Дата 9.1.2011, 03:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 8.10.2010

Репутация: 0
Всего: 0



рисуйте без Image 
Код
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    Graphics::TBitmap* b(new Graphics::TBitmap);
    b->LoadFromFile("e:\\super_puper_cool.bmp"); //ромашечка 19x19 pixels
    int w(b->Width);
    int h(b->Height);
    for (int y(0); y < Height; y += h) {
        for (int x(0); x < Width; x += w) {
            Form1->Canvas->Draw(x, y, b);
        }
    }
delete b;
}
 вообще, рисуйте везде, где есть Canvas , или создавайте Canvas , если ее нет, и рисуйте .

Это сообщение отредактировал(а) oldcode - 9.1.2011, 03:34
PM MAIL   Вверх
livo
Дата 9.1.2011, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



oldcode, это не совсем то, что требуется (взгляните на название темы).
В имейдже есть свойства Center - размещение картинки по центру своей клиентской области; Stretch - растягивание картинки по клиентской области.

Мне же нужно замостить клиентскую область имейджа рисунком, который хранится в его (имейджа) свойстве Bitmap.
PM MAIL   Вверх
oldcode
Дата 9.1.2011, 05:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 8.10.2010

Репутация: 0
Всего: 0



Цитата
Мне же нужно замостить клиентскую область имейджа рисунком, который хранится в его (имейджа) свойстве Bitmap.
 - а в этом свойстве он из воздуха взялся ? 
Код
Graphics::TBitmap* b(new Graphics::TBitmap);
b->Assign(Image1->Picture);


Это сообщение отредактировал(а) oldcode - 9.1.2011, 05:36
PM MAIL   Вверх
livo
Дата 9.1.2011, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 104
Регистрация: 14.10.2007

Репутация: 1
Всего: 1



В общем насколько я понял без постороннего объекта никак не обойтись.
PM MAIL   Вверх
oldcode
Дата 9.1.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 116
Регистрация: 8.10.2010

Репутация: 0
Всего: 0



Цитата(Rrader @ 7.1.2011,  12:58)
Может так
Код

Image2->Canvas->Draw(0, 0, Image2->Picture->Bitmap);

Так в самом начале уважаемый Rrader Вам намекнул. 
Код
void __fastcall TForm1::FormPaint(TObject *Sender)
{
    int w = Image1->Picture->Width;
    int h = Image1->Picture->Height;
    for (int y(0); y < Height; y += h) {
        for (int x(0); x < Width; x += w) {
            Form1->Canvas->Draw(x, y, Image1->Picture->Bitmap);
        }
    }
}
 - без постороннего объекта.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.