Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2010, 09:37   #1
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
Восклицание Загрузка изображения

Как можно загрузить опеределённую часть мзображения из файла?(например, ту часть которая отмечена на картинке(выделена черным цветом))
Изображения
Тип файла: jpg скрин.jpg (16.5 Кб, 142 просмотров)
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.05.2010, 09:58   #2
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Грузите всё это в битмап и используйте Canvas.CopyRect
SERG1980 вне форума Ответить с цитированием
Старый 31.05.2010, 09:59   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Ясно, а как это примерно будет выглядеть в коде?
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.05.2010, 12:50   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Ясно, а как это примерно будет выглядеть в коде?
Для примера:
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var
B: TBitMap;
Begin
B:=TBitMap.Create;
B.LoadFromFile('E:\скрин.bmp');
Form1.Canvas.CopyRect(Rect(0,0,200,400),B.Canvas,Rect(50,175,260,460));
B.Free;
End;
Всегда рад помочь!

Последний раз редактировалось Terran; 31.05.2010 в 12:59.
Terran вне форума Ответить с цитированием
Старый 31.05.2010, 13:03   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Только лучше будет если
Код:
Form1.Canvas.CopyRect(Rect(0,0,100,400),B.Canvas,Rect(0,0,100,B.Height));
Так просто кусок картинки нормальных размеров а не растянутый
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.05.2010, 13:07   #6
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Только лучше будет если
Код:
Form1.Canvas.CopyRect(Rect(0,0,100,400),B.Canvas,Rect(0,0,100,B.Height));
Так просто кусок картинки нормальных размеров а не растянутый
Я немного подправил код в посте №4.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 31.05.2010, 13:39   #7
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Теперь проблема такая. Ширина изображения находящегося в файле больше чем Form1.ClientWidth. При нажатии стрелки вправо картинка должна двигаться влево(ну, как в Марио и т.п.) а при нажатии кнопки вправо картинка должна двигаться вправо.
Вот код:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  n:integer;
  x1,x2:integer;
  x3,x4:integer;
  B: TBitMap;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Begin
B:=TBitMap.Create;
B.LoadFromFile('c:\bmp.bmp');
x1:=0;x2:=B.Width;
Form1.Canvas.CopyRect(Rect(0,0,1024,768),B.Canvas,Rect(0,0,Form1.ClientWidth ,Form1.ClientHeight));
n:=1;
End;





procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if (key = VK_LEFT) and (x1>0) then begin
     x1:=x1-1;x2:=x2-1;
     Form1.Canvas.CopyRect(Rect(0,0,1024,768),B.Canvas,Rect(x1,0,x2,Form1.ClientHeight));
     end;
     if (key = VK_RIGHT) and (x2<1280) then begin
     x1:=x1+10;x2:=x2+10;
     Form1.Canvas.CopyRect(Rect(0,0,1024,768),B.Canvas,Rect(x1,0,x2,Form1.ClientHeight));
     end;
end;

end.
Но почему-то картинка не движется совсем. Что там неправильно?
_-Re@l-_ вне форума Ответить с цитированием
Старый 31.05.2010, 14:54   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
_-Re@l-_
А ты не хочешь поставить точку прерывания на первую строчку обработчика и пройти по коду по шагам чтоб узнать где затык:
Кроме того я бы написал так:
Код:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
     if (key = VK_LEFT) and (x1>0) then begin
      x1:=x1-1;x2:=x2-1;
     end;
     if (key = VK_RIGHT) and (x2<1280) then begin
      x1:=x1+10;x2:=x2+10;
     end;
Canvas.CopyRect(Rect(0,0,1024,768),B.Canvas,Rect(x1,0,x2,Form1.ClientHeight));
end;
Кроме того. Я бы отрисовку прописал в событии OnPAint
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Загрузка поврежденного изображения Linel PHP 1 30.05.2010 17:25
Загрузка изображения в JFrame java_java_java Общие вопросы по Java, Java SE, Kotlin 2 30.07.2009 18:31
Загрузка изображения из потока Joe_Tribbiani Общие вопросы Delphi 1 22.04.2009 03:07
Загрузка изображения в MySQL [Smarik] БД в Delphi 0 13.02.2009 09:04
Загрузка изображения JRcoker Мультимедиа в Delphi 15 04.11.2008 18:32