Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 31.05.2011
Сообщений: 9
1

Побитовое копирование рисунка

11.12.2012, 20:14. Показов 1102. Ответов 6
Метки нет (Все метки)

Есть задание на курсач: Разработать программу, демонстрирующую влияние установленного
приоритета потока на скорость его выполнения. Программа должна
запускать два дочерних потока, в каждом из которых выполняются
одинаковые действия: побитовое копирование некоторого рисунка
в другую область экранной формы (такое замедление работы с графическим
объектом выбрано для наглядности работы потоков).


С потоками всё думаю просто, решил начать с копирования рисунка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for ( int i=0; i<100;i++)
{for (int j=0; j<100;j++)
{
Image2->Canvas->CopyMode = cmSrcCopy;
Image2->Canvas->CopyRect(Rect(i,j,i+1,j+1),Image1->Canvas,Rect(i,j,i+1,j+1));
   }}
   }
//---------------------------------------------------------------------------
то есть по сути эта кнопка должна копировать рисунок 100х100 с одного Image на другой, попиксельно
но она это делает только по окончанию цикла и весь полностью
что Я делаю не так ='(
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2012, 20:14
Ответы с готовыми решениями:

Побитовое копирование double
Доброго времени суток! Преамбула: В целях интеграции Lua в движок C++ пытаюсь написать класс...

Работа с пикселями, побитовое копирование
**Задание: Написать программу, осуществляющую побитовое копирование из одного изображения в другое....

Полное (побитовое) копирование объекта одной строчкой кода. не ссылки
Добрый день, подскажите пожалуйста, как быстро и безболезненно можно скопировать значения одного...

Копирование рисунка из буфера обмена
Добрый день! Потребовалось написать скрипт, который делает скриншот активного окна. Сам скрипт:...

6
LK
Заблокирован
11.12.2012, 22:58 2
1. Потоками здесь и не пахнет.
2. Для чего два цикла.
3. Может, вы заметить не успеваете? Втыкните где-нибудь
C++
1
Sleep(100);
C++
1
2
3
4
5
6
7
Image2->Canvas->CopyMode = cmSrcCopy;
TRect r;
r = Rect(i,i,i+1,i+1);
for ( int i=0; i<100;i++) {
  Image2->Canvas->CopyRect(r,Image1->Canvas,r);
  Sleep(100);
}
0
1 / 1 / 0
Регистрация: 31.05.2011
Сообщений: 9
12.12.2012, 15:36  [ТС] 3
ну так с потоками Я как бы еще не заморачивался
два цикла, для того что бы пройтись по всем координатам от 1.1 до 100.100
втыкивал слип, толку ноль, просто появляется позднее и полностью опять же

ваш код не копирует изображение вообще
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
12.12.2012, 16:20 4
Довольно странное задание. Копирование рисунков на экране и работа с VCL идут через синхронизацию и к тому же ну очень быстро, что бы можно было заметить разницу. Для демонстрации надо брать математический расчет, у каждого потока свой расчет и прогресбар отображающий ход выполнения расчета. Если расчет будет длится секунд 20 то можно будет заметить разницу наглядно. Но опять же современные компы 2 и более ядерные, они одновременно могут считать 2 потока с разными приоритетами одинаково быстро.

Добавлено через 16 минут
Кстати в шестом билдере помнится был похожий пример демонстрирующий скорость разных сортировок. 3 вида сортировок в 3х потоках и наглядно выводился результат на экран.
0
1 / 1 / 0
Регистрация: 31.05.2011
Сообщений: 9
12.12.2012, 16:30  [ТС] 5
ну всё равно, Я жду от него что он мне попиксельно картинку соберет а он раз и всю полностью, гад этакий

да и вообще видимо выбор решения неверен, потому что два потока не могут вроде как к конве одновременно обращаться
0
435 / 402 / 57
Регистрация: 06.02.2012
Сообщений: 1,384
12.12.2012, 16:43 6
C++
1
2
3
4
5
6
7
8
9
10
11
void __fastcall TForm1::Button1Click(TObject *Sender)
{
for ( int i=0; i<100;i++)
{for (int j=0; j<100;j++)
{
Image2->Canvas->CopyMode = cmSrcCopy;
Image2->Canvas->CopyRect(Rect(i,j,i+1,j+1),Image1->Canvas,Rect(i,j,i+1,j+1));
Application->ProcessMessages();
//Sleep(1);
     }}
}
1
1 / 1 / 0
Регистрация: 31.05.2011
Сообщений: 9
12.12.2012, 17:30  [ТС] 7
Спасибо, круто, оно работает)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2012, 17:30

Копирование рисунка вместе с макросом
Добрый день! Есть задача скопировать две кнопки, к которым привязаны макросы, в другую книгу....

Копирование рисунка на Timage c главной формы на вторую
есть две формы:на одной рисуется мышью на Timage рисунок ,по клику на кнопку открывается вторая...

Пиксели рисунка закодированы числами в виде матрицы. Выполнить отражение рисунка сверху вниз
Пиксели рисунка закодированы числами (обозначающими цвет)в виде матрицы,содержащей N строк и M...

Какая функция реализует деление рисунка на части и всплывающее окно при наведении на часть рисунка
Добрый день, уважаемые. Какая функция реализует деление рисунка на части и всплывающее окно при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.