Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.09.25;
Скачать: CL | DM;

Вниз

Изменения размера BMP   Найти похожие ветки 

 
zero-g ©   (2005-05-08 06:14) [0]

Доброго времени суток.

Собственно у меня две проблеммки...
1. Немогу уменьшить bmp, после преоразований получаю черный экран, а после обратных приобразований получаю картинку....

var bmp : TBitmap;
...

вот тут я пытаюсь изменить ее размер

   if  (form1.Image1.Picture.Width > Screen.Width) or (form1.Image1.Picture.Height > Screen.Height) then
    begin
     sizeF := true;
     bmp := TBitmap.Create;
     bmp.Assign(form1.Image1.Picture.Bitmap);
     if form1.Image1.Picture.Width > Screen.Width then
      bmp.Width := Screen.Width;
     if form1.Image1.Picture.Height > Screen.Height then
      bmp.Height := Screen.Height;
     form1.Image1.Picture.Assign(bmp);
     bmp.Free;
     Form1.Image1.Width := Image1.Picture.Width;
     Form1.Image1.Height := Image1.Picture.Height;
    end;

А здесь возращаю обратно...

   if sizeF then
    begin
     sizeF := false;
     bmp := TBitmap.Create;
     bmp.Assign(form1.Image1.Picture.Bitmap);
     bmp.Width := iWidth;
     bmp.Height := iHeigth;
     form1.Image1.Picture.Assign(bmp);
     bmp.Free;
     Form1.HorzScrollBar.Range := iWidth;
     Form1.VertScrollBar.Range := iHeigth;
    end;

Что я не правильно делаю? Подскажите пожалуйста.

2. А вторая проблеммка заключается в том, что по нажатию клавиши и переходу к просмотру на весь экран в первый раз все нормально, небольшая по размерам фото остается своего размера, но если потом  выйти и опять зайти в данный режим, она увиличивается, сама маштабируется типо... ИМХО парадокс!!! Я ничего такого не делел!!! Вчем фишка может быть, самаму аж любопытно...
вот весь код...

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ExtCtrls, ComCtrls, Menus,jpeg;

type
 TForm1 = class(TForm)
   Image1: TImage;
   MainMenu1: TMainMenu;
   File1: TMenuItem;
   Image2: TMenuItem;
   FullScreen1: TMenuItem;
   procedure FormShow(Sender: TObject);
   procedure FormKeyPress(Sender: TObject; var Key: Char);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 x,y,fWidth,fHeigth,iWidth,iHeigth : integer;
 sizeF : boolean;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
var jp : TJPEGImage;
   rash : string[4];
   flag : boolean;
begin
flag := false;
if ParamCount <> 0 then
 begin
  rash := AnsiUpperCase(ExtractFileExt(ParamStr(1)));
  if rash = ".BMP" then
   form1.Image1.Picture.LoadFromFile(ParamStr(1));
  if rash = ".JPG" then
   begin
    jp := TJPEGImage.Create;
    jp.LoadFromFile(ParamStr(1));
    form1.Image1.Picture.Assign(jp);
    jp.Free;
   end;
  flag := true;
 end;
 if flag then
  begin
   Form1.HorzScrollBar.Range := Image1.Picture.Width;
   Form1.VertScrollBar.Range := Image1.Picture.Height;
   Form1.Image1.Width := Image1.Picture.Width;
   Form1.Image1.Height := Image1.Picture.Height;
   iWidth := form1.Image1.Picture.Width;
   iHeigth := form1.Image1.Picture.Height;
  end;
  sizeF := false;
end;

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
var bmp : TBitmap;
begin
if key = #13 then
begin
 if form1.BorderStyle = bsSingle then  
  begin//full screen
   x := form1.Left;
   y := form1.Top;
   fWidth := form1.Width;
   fHeigth := form1.Height;
   form1.BorderStyle :=bsNone;
   form1.File1.Visible := false;
   form1.Image2.Visible := false;
   form1.WindowState := wsMaximized;
   if  (form1.Image1.Picture.Width > Screen.Width) or (form1.Image1.Picture.Height > Screen.Height) then
    begin
     sizeF := true;
     bmp := TBitmap.Create;
     bmp.Assign(form1.Image1.Picture.Bitmap);
     if form1.Image1.Picture.Width > Screen.Width then
      bmp.Width := Screen.Width;
     if form1.Image1.Picture.Height > Screen.Height then
      bmp.Height := Screen.Height;
     form1.Image1.Picture.Assign(bmp);
     bmp.Free;
     Form1.Image1.Width := Image1.Picture.Width;
     Form1.Image1.Height := Image1.Picture.Height;
    end;
  end
 else
  begin//single
   form1.BorderStyle := bsSingle;
   form1.File1.Visible := true;
   form1.Image2.Visible := true;
   form1.WindowState := wsNormal;
   form1.Left := x;
   form1.Top := y;
   form1.Width := fWidth;
   form1.Height := fHeigth;
   form1.Image1.Stretch := true;
   if sizeF then
    begin
     sizeF := false;
     bmp := TBitmap.Create;
     bmp.Assign(form1.Image1.Picture.Bitmap);
     bmp.Width := iWidth;
     bmp.Height := iHeigth;
     form1.Image1.Picture.Assign(bmp);
     bmp.Free;
     Form1.HorzScrollBar.Range := iWidth;
     Form1.VertScrollBar.Range := iHeigth;
    end;
   form1.Image1.Width := iWidth;
   form1.Image1.Height := iHeigth;
  end;
end;
if key = #27 then
close;
end;

end.


 
Leon ©   (2005-05-08 19:06) [1]

Image1.Stretch не поможет?


 
zero-g ©   (2005-05-09 05:10) [2]

to Leon

>Image1.Stretch не поможет?

Неа, самое интересное то, что он вообще отказывается работать...


 
Leon ©   (2005-05-11 09:54) [3]

хм... может так?

var bmp: TBitmap
...
bmp := TBitmap.Create; <- в конструкторе
image1.hide; // не показывать

bmp.Height := ... // нужные размеры: все окно или его часть
bmp.Width := ...
Image1.Picture.Bitmap.Canvas.Draw(0,0,bmp);

canvas.Draw(0,0,bmp); <- в обработчике OnPaint формы

P.S. судя по Вашему коду, сжатие/растяжение не требуется.
P.P.S. > вообще отказывается работать...
cтранно... пробовали просто менять размер Image1 c stretch=true?


 
Vadim68   (2005-05-11 17:52) [4]

А не подскажите как для BMP-файла задать требуемое разрешение. По умолчанию получается 75, а мне надо 400


 
Leon ©   (2005-05-12 19:55) [5]

Если не ошибаюсь, то так

for ix:=0 to 400-1 do
for iy:=0 to 400-1 do
 BigBitmap.Canvas.Pixels[ix,iy] := SmallBitmap.Canvas.Pixels[Round(ix*75/400),Rpund(iy*75/400)];


 
programania ©   (2005-05-12 20:24) [6]

Посмотри еще примеры
http://delphimaster.net/view/8-1114806809/
там размеры image меняются вместе с формой и ничего не пропадает и даже не мерцает

Vadim68   (11.05.05 17:52) [4]
>А не подскажите как для BMP-файла задать требуемое разрешение. По умолчанию получается 75, а мне надо 400

Запиши что надо в заголовке BMP в
biXPelsPerMeter и biYPelsPerMeter
подробнее о формате BMP
http://jenyay.wallst.ru/index.php?id=bmp



Страницы: 1 вся ветка

Текущий архив: 2005.09.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
14-1125469097
stud
2005-08-31 10:18
2005.09.25
SQL books online это так должно быть?


4-1122543654
Amik
2005-07-28 13:40
2005.09.25
как заблочить ХР на доступ?


14-1125637818
SergP
2005-09-02 09:10
2005.09.25
ICQ-вирусы


4-1122551436
Icar
2005-07-28 15:50
2005.09.25
LPT-порт


2-1124280481
Novice
2005-08-17 16:08
2005.09.25
про классы