Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Media";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Вниз

Изменения размера 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 вся ветка

Форум: "Media";
Текущий архив: 2005.09.25;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.055 c
14-1125679258
Джо
2005-09-02 20:40
2005.09.25
Delphi 2005 - Generate XML documentation


14-1125342771
ХорошийЧЕЛ
2005-08-29 23:12
2005.09.25
Создание анимации в Adobe ImageReady


14-1125978782
Ozone
2005-09-06 07:53
2005.09.25
VideoAssm Home Edition :) (зацените)


2-1124049275
СА
2005-08-14 23:54
2005.09.25
Печать


14-1125280392
Булат
2005-08-29 05:53
2005.09.25
справочник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский