Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2009, 20:51   #1
Eugene_Rublev
Новичок
Джуниор
 
Регистрация: 28.09.2009
Сообщений: 4
Восклицание C++ Builder

Помогите пожалуйста, в четверг сдавать работу нужно по заданию аппроксимация полигонов. Вообщем в одной форме я ее написал, но это не очень выглядит. Так вот, я ее начал переписывать через дочернию форму, открывает все норм, в черно белое переводит, а как только жму на кнопку аппроксимировать, то выдает ошибку. Помогите пожалуйста, книги смотрел, но ничего по сути не нашел.
просто хочу разобраться, почему в одной формой работает отлично, а когда через дочернию то нет.

Вот код.

Код:
main.cpp

#include <vcl.h>
#pragma hdrstop
#include "Main.h"
-#pragma resource "*.dfm"
TMainForm *MainForm;

__fastcall TMainForm::TMainForm(TComponent *Owner)
	: TForm(Owner)
{
}

void __fastcall TMainForm::CreateMDIChild(String Name)
{
	TMDIChild *Child;
	Child = new TMDIChild(Application);
	Child->Caption = Name;
	if (FileExists (Name))
	Child->Image1->Picture->LoadFromFile(Name);
}

void __fastcall TMainForm::FileOpen1Execute(TObject *Sender)
{
        TMDIChild *Child;
	if (OpenPictureDialog->Execute())
	CreateMDIChild(OpenPictureDialog->FileName);
}
void __fastcall TMainForm::FileSaveAsItemClick(TObject *Sender)
{
   TMDIChild *Child;
   if(SaveDialog->Execute())
   {
     Child->Image1->Picture->SaveToFile(SaveDialog->FileName);
   }
}

child.cpp
#include <vcl.h>
#pragma hdrstop
#include "ChildWin.h"
#include "Main.h"
#pragma resource "*.dfm"
 
__fastcall TMDIChild::TMDIChild(TComponent *Owner)
	: TForm(Owner)
{
}
int AllSCount, MaxL=0, LS=0;
void squares(int x, int y, int x1, int y1, int stage)
{
        TMDIChild*Child;
        AllSCount +=1;
        if ( (abs(x-x1)<2)&&(abs(y-y1)<2))
  {
        if (MaxL<LS) MaxL=LS;
        LS--;
	Child->Image2->Canvas->Pixels[x][y] = Child->Image1->Canvas->Pixels[x][y];
	return;
  }


  int minbr = 255, maxbr = 0, sumbr = 0, count = 0;

  for (int i = y; i <= y1; i++)
  {
	for (int j = x; j <= x1; j++)
	{
	  {
		int br = Child->Image1->Canvas->Pixels[j][i] & 255;
		if (br < minbr) minbr = br;
		if (br > maxbr) maxbr = br;
		sumbr += br;
		count ++;
	  }
	}
  }

  if (count == 0) return;
  if (maxbr - minbr > stage)
  {
	Child->Image3->Canvas->Rectangle(x, y, (x+x1)/2, (y+y1)/2);
	Child->Image3->Canvas->Rectangle((x+x1)/2, y, x1, (y+y1)/2);
	Child->Image3->Canvas->Rectangle(x, (y+y1)/2, (x+x1)/2, y1);
	Child->Image3->Canvas->Rectangle((x+x1)/2, (y+y1)/2, x1, y1);

        LS++;
	squares(x, y, (x+x1)/2, (y+y1)/2, stage);
        LS++;
	squares((x+x1)/2, y, x1, (y+y1)/2, stage);
        LS++;
	squares(x, (y+y1)/2, (x+x1)/2, y1, stage);
        LS++;
	squares((x+x1)/2, (y+y1)/2, x1, y1, stage);

        LS--;
	return;
  }

   int averagebr = sumbr / count;

  for (int i = y; i <= y1; i++)
  {
	for (int j = x; j <= x1; j++)
	{
	  {

		Child->Image2->Canvas->Pixels[j][i] = averagebr | (averagebr << 8) | (averagebr << 16);

	  }
	}
  }
   if (MaxL<LS) MaxL=LS;
   LS--;
}

void __fastcall TMDIChild::FormClose(TObject *Sender, TCloseAction &Action)
{
	Action = caFree;
}

void __fastcall TMDIChild::Button1Click(TObject *Sender)
{
TMDIChild*Child;
for (int i = 0; i < Image1->Height; i++)
  {
	for (int j = 0; j < Image1->Width; j++)
	{
	  int color = Image1->Canvas->Pixels[j][i];
	  int r = (color >> 16);
	  int g = (color >> 8) & 255;
	  int b = color & 255;
	  int gray = (r + g + b) / 3;
	  Image1->Canvas->Pixels[j][i] = (gray << 16) | (gray << 8) | gray;
	}
  }
}

void __fastcall TMDIChild::Button2Click(TObject *Sender)
{
TMDIChild*Child;

int stage = atoi(Edit1->Text.c_str()),compr=65536;
 AllSCount=0;
 MaxL=0;
 compr=65536;
 LS=0;
   if (stage > 254)
   {
     squares(0, 0, Child->Image1->Width, Child->Image1->Height, stage);
     Child->Label3->Caption="1";
     Child->Label4->Caption = compr;
     Child->Label5->Caption = MaxL+1;

   }
   else
   {
  Child->Image3->Canvas->Rectangle(0, 0, (Child->Image1->Width)/2, (Child->Image1->Height)/2);
  Child->Image3->Canvas->Rectangle((Child->Image1->Width)/2, 0, Child->Image1->Width - 2, (Child->Image1->Height)/2);
  Child->Image3->Canvas->Rectangle(0, (Child->Image1->Height)/2, (Child->Image1->Width)/2, Child->Image1->Height - 2);
  Child->Image3->Canvas->Rectangle((Child->Image1->Width)/2, (Child->Image1->Height)/2, Child->Image1->Width - 2, Child->Image1->Height - 2);

  squares(0, 0, (Child->Image1->Width)/2, (Child->Image1->Height)/2, stage);
  LS=0;
  squares((Child->Image1->Width)/2, 0, Child->Image1->Width - 2, (Child->Image1->Height)/2, stage);
  LS=0;
  squares(0, (Child->Image1->Height)/2, (Child->Image1->Width)/2, Child->Image1->Height - 2, stage);
  LS=0;
  squares((Child->Image1->Width)/2, (Child->Image1->Height)/2, Child->Image1->Width - 2, Child->Image1->Height - 2, stage);
  Child->Label3->Caption = AllSCount;
  Child->Label5->Caption = (MaxL+1)*4;
  if (stage==0) Child->Label4->Caption = "0";
  else
  Child->Label4->Caption = compr-AllSCount;
  }
}[/SIZE]

Последний раз редактировалось Stilet; 29.09.2009 в 11:21.
Eugene_Rublev вне форума Ответить с цитированием
Старый 29.09.2009, 11:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
то выдает ошибку.
Какую ошибку на какой строке?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2009, 15:30   #3
Eugene_Rublev
Новичок
Джуниор
 
Регистрация: 28.09.2009
Сообщений: 4
По умолчанию

Ошибка:

Project mdiapp.exe raised exeption class EAccessViolation with message 'Access violation at adress 004028E6 in module 'mdiapp.exe'. Read of adress 00000303'. Process stopped. Use Step or Run to continue.

Вот, а ошибка на строке...

void __fastcall TMDIChild::Button2Click(TObject *Sender)
{
........

else
{
Child->Image3->Canvas->Rectangle(0, 0, (Child->Image1->Width)/2, (Child->Image1->Height)/2);
.......
Eugene_Rublev вне форума Ответить с цитированием
Старый 29.09.2009, 16:13   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Eugene_Rublev
Проверь может какой нить из компонентов этой команды равен nil.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.09.2009, 17:38   #5
Eugene_Rublev
Новичок
Джуниор
 
Регистрация: 28.09.2009
Сообщений: 4
По умолчанию

Хорошо. А в чем суть то может быть?!7 Может неправильно ссылаюсь на форму?!?
Eugene_Rublev вне форума Ответить с цитированием
Старый 29.09.2009, 17:50   #6
Eugene_Rublev
Новичок
Джуниор
 
Регистрация: 28.09.2009
Сообщений: 4
По умолчанию

А да кстати это может быть вызвано с тем что при компиляции он выдает два ворнинга о том что assigning int toTColor в строчках

Child->Image2->Canvas->Pixels[j][i] = averagebr | (averagebr << 8) | (averagebr << 16);

и


Image1->Canvas->Pixels[j][i] = (gray << 16) | (gray << 8) | gray;

и если да, то как сделать, чтобы это исправить.

правда он эти же ворнинги выдает и когда одна форма, правда там все нормально
Eugene_Rublev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести код из C++ Builder 5 в C++ Builder 2009 Kreadlling C++ Builder 2 13.09.2009 14:00
C++ BUILDER Dimarik C++ Builder 60 17.07.2009 20:55
из С++ в С++Builder 6.0 densan Помощь студентам 3 30.05.2009 00:18
C++ Builder!!! kykysya C++ Builder 4 08.02.2009 03:33
БД в с++ builder Luna_13 Общие вопросы C/C++ 0 11.11.2008 14:44