Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Image


Автор: W_A_S_J_A 1.11.2008, 16:37
Подскажите пожалуста. Мне необходимо в пограмі загружать изображение в Image. Но изображение больше размеров самого Image, а по ходу самого выполнения программы необходимо эту картинку смещать, то есть отображать нужную часть изображения. Я хочу реализовать отображение изображений в моей программе, так как это реализовано во многих скінах разных программ. То есть, есть одна большая картинка в которой изображены все необходимы изображения, и соответственно из программы передвигать ее, чтобы отображалось толька то изображение, которое в тот момент времени необходимо. Размер Image у меня равен одному элементу на большом изображении. Меня интересует как осуществить это перемещение изображения в Image

Автор: SVN74 1.11.2008, 17:32
Судя по описанному выше, необходимо еще знать информацию о месте положения малого рисунка в большом рисунке.
===================
Можно просто загрузить большой рисунок в объект TBitmap  и  затем переносить из него пиксели (в Image) + смещение по координатам относительно размера малой картинки.

Автор: W_A_S_J_A 1.11.2008, 18:30
SVN74 Допустимо что координаты малого рисунка в большом известны. Как это реализовать? Можете написать пример?

Автор: SVN74 1.11.2008, 20:23
Вот набросал программку (для примера), которая загружает BMP картину размером (1600х1200) и затем кнопками право, лево, вверх, вниз, выделяет кусок (160х120)  из этой картины и отображает его в Image.
Вот внешний вид программки:
 http://pic.ipicture.ru/uploads/081101/TLG6LnuTiy.jpg

Код

#include <vcl.h>
#pragma hdrstop

#include "BMP.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 Graphics::TBitmap *BitMapBig=new Graphics::TBitmap;    // Переместить в заголовок формы
  Graphics::TBitmap *BitMapSmall=new Graphics::TBitmap;  // Переместить в заголовок формы
 int Ximage = 160,Yimage = 120; // размер малого изображения (выдуман для примера)
 int y,x; //количество картинок (изначально)
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
   x=0;y=0;
   BitMapBig->LoadFromFile("1_Proba.bmp"); // загрузка файла (большого рисунка 1600 x 1200)
   BitMapSmall->Width = Ximage;
   BitMapSmall->Height = Yimage;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  Image1->Stretch = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::LeftClick(TObject *Sender)
{
  if(x>0) x--;
  BitBlt(BitMapSmall->Canvas->Handle,0,0,Ximage,Yimage,BitMapBig->Canvas->Handle,x*Ximage,y*Yimage,SRCCOPY);
  Image1->Picture->Assign(BitMapSmall);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BigShowClick(TObject *Sender)
{
   Image1->Picture->Assign(BitMapBig);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::UpClick(TObject *Sender)
{
  if(y>0) y--;
  BitBlt(BitMapSmall->Canvas->Handle,0,0,Ximage,Yimage,BitMapBig->Canvas->Handle,x*Ximage,y*Yimage,SRCCOPY);
  Image1->Picture->Assign(BitMapSmall);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RightClick(TObject *Sender)
{
  if(x < (1600 / Ximage -1)) x++;
  BitBlt(BitMapSmall->Canvas->Handle,0,0,Ximage,Yimage,BitMapBig->Canvas->Handle,x*Ximage,y*Yimage,SRCCOPY);
  Image1->Picture->Assign(BitMapSmall);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DownClick(TObject *Sender)
{
  if(y < (1200 / Yimage -1)) y++;
  BitBlt(BitMapSmall->Canvas->Handle,0,0,Ximage,Yimage,BitMapBig->Canvas->Handle,x*Ximage,y*Yimage,SRCCOPY);
  Image1->Picture->Assign(BitMapSmall);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete BitMapBig;
 delete BitMapSmall;
}

Автор: W_A_S_J_A 1.11.2008, 22:48
SVN74,  Большая благодарность за приведенный код. Все работает СУПЕР. Еще раз большое благодарю, ты меня выручил.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)