terça-feira, 24 de setembro de 2019

C++ Builder - desenhando partes de uma imagem

Quando clicamos no botão Draw, uma variável
global inteira inicializada em -1 é incrementada
e estes valores serão utilizados para a chamada
de cada parte recortada de nosso bitmap,
e estas chamadas só ocorrem clicando neste mesmo botão,
onde preferimos usar um nome em inglês para encurtar
o seu tamanho.
O botão imagem, chama o bitmap principal,
mas o programa funciona muito bem sem ele,
na verdade está servindo como personalização,
e para que o usuário saiba de onde está sendo
desenhado o bitmap em tempo de execução.
Então sem entrar em detalhes da parte gráfica de bitmaps,
o que estamos fazendo aqui é recortando partes
do bitmap, estrategicamente e desenhando num destino
escolhido preferivelmente por nós mesmos.



//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <memory>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int a = -1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1 ( TComponent* Owner )
: TForm ( Owner )
{
}
Graphics::TBitmap* bitimap;
//---------------------------------------------------------------------------
void __fastcall TForm1::Informe ( TObject *Sender ) {
    Canvas -> Font -> Name = "Garamond";
    Canvas -> Font -> Size = 14;
    Canvas -> Font -> Color = clBlack;
    Canvas -> TextOut ( 200, 240, "Por: " );
    Canvas -> Font -> Color = clRed;
    Canvas -> TextOut ( 240, 240, "Samuel Lima" );
    Canvas -> Font -> Color = clBlue;
    Canvas -> TextOut ( 196, 260, "sa_sp10@hotmail.com" );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click ( TObject *Sender )
{
    //Coordenadas do primeiro bitmap
    Canvas -> Draw ( 30, 40, bitimap );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click ( TObject *Sender )
{
    String str;
    int x;
    int y;
    int largura;
    int altura;
    int x_1;
    int y_1;
    int largura_1;
    int altura_1;
    a++;
    if ( a < 10 ) {
      str = "0";
    }
    str += a;
    Label1 -> Caption = str;
    /*====================================================================*/
    if ( a == 0 ) {
        //Posição do recorte a ser capturado
        x = 68;
        y = 134;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    if ( a == 1 ) {
        //Posição do recorte a ser capturado
        x = 0;
        y = 0;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    if ( a == 2 ) {
        //Posição do recorte a ser capturado
        x = 68;
        y = 0;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    if ( a == 3 ) {
        //Posição do recorte a ser capturado
        x = 133;
        y = 0;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
        }
        /*====================================================================*/
        if ( a == 4 ) {
        //Posição do recorte a ser capturado
        x = 199;
        y = 0;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
        }
        /*====================================================================*/
        if ( a == 5 ) {
        //Posição do recorte a ser capturado
        x = 0;
        y = 67;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
        /*====================================================================*/
        if ( a == 6 ) {
        //Posição do recorte a ser capturado
        x = 68;
        y = 67;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    if ( a == 7 ) {
        //Posição do recorte a ser capturado
        x = 133;
        y = 67;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
        if ( a == 8 ) {
        //Posição do recorte a ser capturado
        x = 199;
        y = 67;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
        if ( a == 9 ) {
        //Posição do recorte a ser capturado
        x = 0;
        y = 134;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    if ( a == 10 ) {
        //Posição do recorte a ser capturado
        x = 133;
        y = 134;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
        if ( a == 11 ) {
        //Posição do recorte a ser capturado
        x = 199;
        y = 134;
        //Tamanho do recorte a ser capturado
        largura = 60;
        altura = 60;
        // imprimindo a região cortada
        //Posicionamento do recorte capturado da imagem
        x_1 = 403;
        y_1 = 50;
        //Tamanho do recorte destino
        largura_1 = 60;
        altura_1 = 60;
    }
    /*====================================================================*/
    Canvas -> CopyRect (
            //o primeiro ret é o destino
            TRect ( x_1, y_1, x_1 + largura_1, y_1 + altura_1 )
            //segundo é a tela da fonte
            ,bitimap -> Canvas
            //terceiro é o retângulo da fonte que desejamos copiar
            ,TRect ( x, y, x + largura, y + altura )
    );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnPaint(TObject *Sender)
{
    bitimap = new Graphics::TBitmap ( );
    bitimap -> Width = 200;
    bitimap -> Height = 200;
    bitimap -> LoadFromFile ("C:\\Users\\ManMachine\\Downloads\\"
            "\\Contador personalizado manual\\números.bmp" );
                Canvas -> Pen -> Width = 10;
    Canvas -> Pen -> Color = clRed;
    Canvas -> Rectangle ( 05, 05, 595, 295 );
    Canvas -> Font -> Size = 14;
    Canvas -> Font -> Name = "arial";
    Canvas -> Font -> Color = clRed;
    Canvas -> Font-> Style = TFontStyles ( ) << fsBold << fsItalic << fsUnderline;
    Canvas -> TextOut ( 110, 12, "DESENHANDO PARTES DE UMA IMAGEM" );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::OnTimer(TObject *Sender)
{
   if ( a == 12 ) {
      Informe ( Sender );
    }
    if ( a == 13 ) {
       Form1 -> Close ( );
    }
}
//---------------------------------------------------------------------------



//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <System.Classes.hpp>
#include <Vcl.Controls.hpp>
#include <Vcl.StdCtrls.hpp>
#include <Vcl.Forms.hpp>
#include <Vcl.ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TButton *Button1;
    TButton *Button2;
    TLabel *Label1;
    TTimer *Timer1;
    void __fastcall Informe ( TObject *Sender );
    void __fastcall Button2Click(TObject *Sender);
    void __fastcall Button1Click(TObject *Sender);
    void __fastcall OnPaint(TObject *Sender);
    void __fastcall OnTimer(TObject *Sender);
private:    // User declarations
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif



object Form1: TForm1
  Left = 455
  Top = 89
  Caption = 'DESENHANDO PARTES DE UMA IMAGEM'
  ClientHeight = 300
  ClientWidth = 600
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  Position = poDesigned
  OnPaint = OnPaint
  PixelsPerInch = 96
  TextHeight = 13
  object Label1: TLabel
    Left = 376
    Top = 144
    Width = 46
    Height = 81
    Caption = ' '
    Font.Charset = ANSI_CHARSET
    Font.Color = clRed
    Font.Height = -77
    Font.Name = 'alarm clock'
    Font.Style = [fsBold]
    ParentFont = False
  end
  object Button1: TButton
    Left = 104
    Top = 259
    Width = 75
    Height = 25
    Caption = 'Imagem'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'Tahoma'
    Font.Style = [fsBold]
    ParentFont = False
    TabOrder = 0
    OnClick = Button1Click
  end
  object Button2: TButton
    Left = 440
    Top = 259
    Width = 75
    Height = 25
    Caption = 'Draw'
    Font.Charset = DEFAULT_CHARSET
    Font.Color = clWindowText
    Font.Height = -13
    Font.Name = 'Tahoma'
    Font.Style = [fsBold]
    ParentFont = False
    TabOrder = 1
    OnClick = Button2Click
  end
  object Timer1: TTimer
    Interval = 2000
    OnTimer = OnTimer
    Left = 536
    Top = 24
  end
end


Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.