Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Bmp -->JPG


ser_ega ©   (2004-11-05 23:14:00) 

Мастера помогите! Как такой код

Bmp := TBitMap.Create;
 try
  ARect := Rect(701,776,766,806);
  with Bmp, Arect do begin
    Height :=Bottom - Top;
    Width :=Right-Left;
    Canvas.CopyRect(Rect(0,0,Width,Height), Image1.Canvas, ARect);
  end;
  Bmp.SaveToFile('c:\copyrect.bmp');
  finally
    Bmp.Free;
  end;

переделать так чтобы, выделенный фрагмент сохранялся в JPG?


Mihey_temporary   (2004-11-07 19:47:00) [1]

Очистить можно так:


Image.Picture.Graphic := nil;


При этом TImage сам освобождает память (нет потери указателей, как может показаться). Это легко проверить:


var Gr: TGraphic;
Gr := Image.Picture.Graphic;
Image.Picture.Graphic := nil;
Gr.Free; // <- вызовет ошибку, т.к. Gr уже освобождён


ser_ega   (2004-11-07 18:11:00) [2]

Большое Вам спасибо! Может вы мне еще подскажите как очистить Image от картинки, а то при попытке закрыть форму выскакивает окно "Процессор". Я думаю это потому что в Image картинка большого размера (2500 Х 3500). А уменьшать его не хочется т.к. уменьшится и нужный мне фрагмент. Может вы посоветуете более рациональный способ! Еще раз СПАСИБО!


Mihey_temporary   (2004-11-07 17:43:00) [3]

Кусок кода:


procedure TmainForm.btnSaveClick(Sender: TObject);

 procedure SetBitmapSize(var ABitmap: TBitmap;
   Width, Height: Integer);
  begin
    ABitmap.Width := Width;
    ABitmap.Height := Height;
  end;

var
 InternalBitmap: TBitmap;
 TheOneToSave: TBitmap;
 jp: TJPEGImage;
 ARect: TRect;
begin
 ARect := Rect(StrToInt(edLeft.Text), StrToInt(edTop.Text),
   StrToInt(edRight.Text), StrToInt(edBottom.Text));
 If Image.Picture.Graphic <> nil then
  begin
   TheOneToSave := TBitmap.Create;
   SetBitmapSize(TheOneToSave, ARect.Right-ARect.Left,
     ARect.Bottom-ARect.Top);
   try
     InternalBitmap := TBitmap.Create;
     try
       SetBitmapSize(InternalBitmap, Image.Picture.Graphic.Width,
         Image.Picture.Graphic.Height);
       InternalBitmap.Canvas.Draw(0, 0, Image.Picture.Graphic);
       TheOneToSave.Canvas.CopyRect(Rect(0, 0, TheOneToSave.Width,
         TheOneToSave.Height), InternalBitmap.Canvas, ARect);
      finally
        InternalBitmap.Free;
      end;
      // Saving JPEG...
     jp := TJpegImage.Create;
     try
      with jp do
       begin
        Assign(TheOneToSave);
        SaveToFile('temp1.jpg');
       end;
     finally
      jp.Free;
     end;
   finally
     TheOneToSave.Free;
   end;
  end
   else
    begin
      MessageDlg('No image loaded!', mtError, [mbOk], 0);
    end;
end;


И готовый архив:
http://www.hot.ee/mvps19/JpegWork.rar [242 Kb]


ser_ega   (2004-11-07 12:13:00) [4]

Подскажите может другое решение моей проблемы найдется! Я Вас очень прошу!


ser_ega   (2004-11-06 23:39:00) [5]

Mihey_temporary Ваш пример тоже выдает ту же ошибку!

Что такое SomeSource? У меня в Image1 находится JPG. Прикол в том что если я В Image1 загружаю Bmp то все работает, а вот с Jpg проблемки!


Mihey_temporary   (2004-11-06 23:00:00) [6]

Подключай воображение. Примерно так:


var
 jp: TJpegImage;  
begin
 Bmp := TBitMap.Create;
 jp := TJpegImage.Create;
 try
  ARect := Rect(701,776,766,806);
  with Bmp, Arect do
   begin
    Height := Bottom - Top;
    Width := Right-Left;
    Canvas.CopyRect(Rect(0,0,Width,Height), SomeSource.Canvas, ARect);
   end;
   with jp do
   begin
     Assign(Bmp);
     SaveToFile('c:\oneeye.jpg')
   end;
 finally
   jp.Free;
   Bmp.Free;
 end;


ser_ega   (2004-11-06 22:52:00) [7]

Удалено модератором


ser_ega   (2004-11-06 17:52:00) [8]

Я его переделал так:

Bmp := TJpegImage.Create;
 try
  ARect := Rect(50,50,100,100);
  with  Arect do begin
    Height :=Bottom - Top;
    Width :=Right-Left;
    Canvas.CopyRect(Rect(0,0,Width,Height), Image1.Canvas, ARect);
  end;
  Bmp.SaveToFile('c:\copyrect.jpg');
  finally
    Bmp.Free;
  end;

А при обработке этой процедуры выдается такая ошибка - Can only modify am image if it contains a bitmap. Как это исправить?


Mihey_temporary   (2004-11-06 00:46:00) [9]

В справке Delphi набери "TGraphic.SaveToFile" и посмотри пример.


Наверх

Титульная страница Поиск, карта сайта Написать письмо