CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Skalowanie obrazu bez zapisu

Skalowanie obrazu bez zapisu

dział ogólny

Skalowanie obrazu bez zapisu

Nowy postprzez xredom » czwartek, 18 kwietnia 2013, 10:54

Witam próbuje zrobić skalowanie w nowej formie z tym że ze skalowany już obrazek chciałbym żeby się nie zapisywał lecz wrócił zmieniony do formy1, w sumie prawie już tak jest z tym że ze skalowany obrazek nakłada się na poprzednihttps://www.dropbox.com/s/17kgjs1pyn2wvmu/Skalowanie.png da się usunąć poprzedni rysunek i zachować nowy ze skalowany?
Plik cpp Formy7:
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit7.h"
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
TForm7 *Form7;
//---------------------------------------------------------------------------
__fastcall TForm7::TForm7(TComponent* Owner)
        : TForm(Owner)
{
DoubleBuffered = true;
BMP = new Graphics::TBitmap();

 img = Form1->Image;
 img->Stretch = false;
 img->AutoSize = true;
}
//---------------------------------------------------------------------------
Graphics::TBitmap *ConvertImage(TImage *Cimg)
{
 Graphics::TBitmap * bmp = new Graphics::TBitmap();
 bmp->Width = Cimg->Width;
 bmp->Height = Cimg->Height;

 bmp->Canvas->Draw( 0, 0, Cimg->Picture->Graphic);

 return bmp;
}
//---------------------------------------------------------------------------

void __fastcall TForm7::CSpin1Change(TObject *Sender)
{
try
 {
  if(ActiveControl == CSpin1)
  {
   float y = (float)img->Width / ((float)img->Height / (float)CSpin1->Value);
   CSpin2->Value = y;
  }
 }catch(...){;}
}
//---------------------------------------------------------------------------

void __fastcall TForm7::CSpin2Change(TObject *Sender)
{
 try
 {
  if(ActiveControl == CSpin2)
  {
   float x = (float)img->Height / ((float)img->Width / (float)CSpin2->Value);
   CSpin1->Value = x;
  }
 }catch(...){;}
}
//---------------------------------------------------------------------------

void __fastcall TForm7::BitBtn1Click(TObject *Sender)
{
  Image1->Width = CSpin2->Value;
  Image1->Height = CSpin1->Value;

  Image1->Canvas->CopyMode = cmNotSrcCopy;
  Image1->Canvas->StretchDraw(Rect(0, 0, Image1->Width, Image1->Height), Image1->Picture->Bitmap);
  Form1->Image->Picture->Assign(Image1->Picture);

  Form1->Show();
  Form7->Close();


}
//---------------------------------------------------------------------------

void __fastcall TForm7::BitBtn2Click(TObject *Sender)
{
Form7->Close();
}
//---------------------------------------------------------------------------
 

plik nagłówkowy:
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#ifndef Unit7H
#define Unit7H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include "CSPIN.h"
#include <Buttons.hpp>
#include <ExtCtrls.hpp>
#include <Dialogs.hpp>
#include <ExtDlgs.hpp>
#include <JPEG.hpp>
//---------------------------------------------------------------------------
class TForm7 : public TForm
{
__published:    // IDE-managed Components
        TImage *Image1;
        TBitBtn *BitBtn1;
        TBitBtn *BitBtn2;
        TCSpinEdit *CSpin1;
        TCSpinEdit *CSpin2;
        void __fastcall CSpin1Change(TObject *Sender);
        void __fastcall CSpin2Change(TObject *Sender);
        void __fastcall BitBtn1Click(TObject *Sender);
        void __fastcall BitBtn2Click(TObject *Sender);
private:        // User declarations
public:         // User declarations
        __fastcall TForm7(TComponent* Owner);
        Graphics::TBitmap *BMP;
        TImage *img;

};
//---------------------------------------------------------------------------
extern PACKAGE TForm7 *Form7;
//---------------------------------------------------------------------------
#endif
 

plik cpp formy1:
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit7.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
        if(OpenPictureDialog1->Execute())
  {
        Image->Picture->LoadFromFile(OpenPictureDialog1->FileName);
  }

}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn6Click(TObject *Sender)
{
        Form7->BMP->Assign( Image->Picture->Graphic );
        Form7->BMP->PixelFormat = pf32bit;

        Form7->Image1->Picture->Assign( Form7->BMP );
        Form7->CSpin1->Value = Image->Height;
        Form7->CSpin2->Value = Image->Width;
        Form7->ShowModal();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn9Click(TObject *Sender)
{
     SavePictureDialog1->Execute();
        Image->Picture->SaveToFile(SavePictureDialog1->FileName);
}
//---------------------------------------------------------------------------
 
Avatar użytkownika
xredom
Bladawiec
Bladawiec
 
Posty: 22
Dołączył(a): niedziela, 14 kwietnia 2013, 20:00
Podziękował : 12
Otrzymał podziękowań: 0
System operacyjny: windows 7
Kompilator: C++ Bulider 6
Gadu Gadu: 0
    Windows 7Chrome

Re: Skalowanie obrazu bez zapisu

Nowy postprzez Mironas » czwartek, 18 kwietnia 2013, 12:42

Jeśli dobrze Ciebie zrozumiałem to po prostu chcesz wpisać do Image1 nowy obraz tak aby zniknął stary. Jeśli TAK, to sugeruję na drugiej formie utworzyć 2 bitmapy: 1 - obraz źródłowy, 2 - obraz przeskalowany.

Zmieniając rozmiar kopiujesz (StretchDraw) z BMP1 do BMP2. Obiektów Image używaj tylko do wyświetlenia zmienionej bitmapy.

Popatrz do kodu:

Unit1.cpp
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
  : TForm(Owner)
{
  DoubleBuffered = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  if ( OpenPictureDialog1->Execute() )
    Image->Picture->LoadFromFile(OpenPictureDialog1->FileName);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
  Form2->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Image->Picture->Bitmap = NULL;  
}
//---------------------------------------------------------------------------
 


Unit2.h
KOD cpp:     UKRYJ  
private:        // User declarations
  TImage *img;
  Graphics::TBitmap *BMP1;
  Graphics::TBitmap *BMP2;
  void PokazPodglad();
 


Unit2.cpp
KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
  : TForm(Owner)
{
  DoubleBuffered = true;
  img = Form1->Image;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormShow(TObject *Sender)
{
  BMP1 = new Graphics::TBitmap();
  BMP2 = new Graphics::TBitmap();
  BMP1->Assign(Form1->Image->Picture->Bitmap);
  CSpin1->Value = Form1->Image->Height;
  CSpin2->Value = Form1->Image->Width;
  PokazPodglad();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
  delete BMP1;
  delete BMP2;
}
//---------------------------------------------------------------------------
void __fastcall TForm2::CSpin1Change(TObject *Sender)
{
  if ( ActiveControl == CSpin1 )
  {
    float y = (float)img->Width / ((float)img->Height / (float)CSpin1->Value);
    CSpin2->Value = y;
    PokazPodglad();
  }
}
//---------------------------------------------------------------------------
void __fastcall TForm2::CSpin2Change(TObject *Sender)
{
  if ( ActiveControl == CSpin2 )
  {
    float x = (float)img->Height / ((float)img->Width / (float)CSpin2->Value);
    CSpin1->Value = x;
    PokazPodglad();
  }
}
//---------------------------------------------------------------------------
void TForm2::PokazPodglad()
{
  BMP2->Width = CSpin2->Value;
  BMP2->Height = CSpin1->Value;

  //BMP2->Canvas->CopyMode = cmNotSrcCopy;
  BMP2->Canvas->StretchDraw(Rect(0, 0, CSpin2->Value, CSpin1->Value), BMP1);

  Image1->Picture->Bitmap->Assign(BMP2);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn1Click(TObject *Sender)
{
  Form1->Image->Picture->Assign(Image1->Picture);
  Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm2::BitBtn2Click(TObject *Sender)
{
  Close();
}
//---------------------------------------------------------------------------
 

Za ten post autor Mironas otrzymał podziękowanie od:
xredom
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: Skalowanie obrazu bez zapisu

Nowy postprzez xredom » czwartek, 18 kwietnia 2013, 13:48

Tak dzięki o to mi chodziło :)
Avatar użytkownika
xredom
Bladawiec
Bladawiec
 
Posty: 22
Dołączył(a): niedziela, 14 kwietnia 2013, 20:00
Podziękował : 12
Otrzymał podziękowań: 0
System operacyjny: windows 7
Kompilator: C++ Bulider 6
Gadu Gadu: 0
    Windows 7Chrome


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 19 gości

cron