Fryazino.NET Forum || Hard&Soft || C++
>> Привет, Гость! Войдите! : вход | поиск | правила | банлист
Автор
C++ (14) 1 2 ... 11 12 13 14 | перейти:   для печати | RSS 2.0
Smuggler
Участник
Рассмотрим ассоциативный массив map<int, int > m из n элементов. Оцените время работы функции m.find(5) и find(m.begin(), m.end(), 5). Сравните полученные результаты.

m.find()-ищет по ключу, а find()- по значению?
Сообщение изменено Smuggler от 2009-07-22 21:31:33
IP
KnighT
Участник
licq:1412
To Smuggler
Нет, find() - это из серии обобщенных STL алгоритмов, а m.find() - это member функция для отображения. Функция-член работает по определению быстрее, чем обобщённая.
IP
unnAm3d
Участник
х3
To Smuggler
алгоритм find действительно перебирает словарь (map) и сравнивает со значением. Но ассоциативные контейнеры устроены так, что элементы не выстроены в линейную последовательность. Поэтому inline метод find будет искать с помощью уникальных ключей - что значительно быстрее. Выигрыш в скорости - по-моему квадратичная зависимость от размера контейнера.
IP
k1rR
Участник
HATE THIS REAL
licq:2153
Кто может пример привести следующей весчи:
Дана форма на C# и библиотека на С++ (пользовательская).
Каков принцип обращение из шарпа к плюсам?
просто через вызов необходимой библиотеки или как-то по хитрому?
(задаю вопрос, т.к. пока нет возможности самому проверить...)
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
Гугли o System.Runtime.InteropServices
IP
hyper
Участник
Учите матчасть - вдруг вас разбудят ночью, а вам и
licq:4421
никто не хочет размять слегка серые клеточки?))
вообщем нужно применить фильтр BLUR к bmp файлу....

задача состоит в том, чтобы считать матрицу цветов из бмп и умножить её на матрицу преобразования фильтра, я прав?))....
Сообщение изменено hyper от 2010-03-14 15:46:41
IP
rope
Участник
увага! пускаем бобров!
licq:1607
To hyper
ну да, пройтись сверткой по изображению
как убыстренный вариант - сделать сепарабельный гаусс (блюр раскладывается на горизонталь + вертикаль)
IP
Pavia
Участник
программирование
licq:1754
To hyper
Проще взять ATI Steam SDK v2.xx там уже есть и пример на C++ и на OpenCL.
Причем и оптимизирован как надо.
IP
hyper
Участник
Учите матчасть - вдруг вас разбудят ночью, а вам и
licq:4421
Никто не хочет заняться этим? )
За пару пивасиков)
IP
B-Nom
Участник
licq:1012
Есть такая библиотека быстрых функций цифровой обработки сигналов и изображений

Intel® Integrated Performance Primitives for Intel®Architecture

В ней имеецо

код:
 
Blur
Calculates convolution of source image with
blurring kernel.

IppStatus ippiBlur_<mod>(const Ipp<srcDatatype>* pSrc, int srcStep,
Ipp<dstDatatype>* pDst, int dstStep, IppiSize* pRoiSize,
IppiConvState* pState, int stage);

Supported values for mod :

Arguments
pSrc Pointer to the source image.
srcStep Step in bytes through the source image.
pDst Pointer to the destination image.
dstStep Step in bytes through the destination image.
pRoiSize Pointer to the ROI structure to be initialized with the current
image size. The function stores the number of obtained rows
in pRoiSize.
pState Pointer to the convolution structure.
stage Processing stage that can be one of the following:

IPPI_WHOLE functions process the whole image.
IPPI_START functions initialize the cyclic buffer and
process the top part of the large image. The
produced part is smaller than the source part,
and is equal to the source part if the
structuring element is of height 1.
IPPI_END functions flush the cyclic buffer and process
the bottom part of the large image. The
produced part is larger than the source part,
and is equal to source part if the structuring
element is of height 1.


Discussion
The function ippiBlur is declared in the ippcv.h file. This function calculates
convolution of the source image pSrc with the blurring kernel and stores the result in
pDst. The kernel is a matrix every element of which is 1:
1 1 1
1 1 1
1 1 1

Return Value
ippStsNoErr Indicates no error. Any other value indicates an error or a
warning.
ippStsNullPtrErr Indicates an error condition if any of the specified pointers
is NULL.
ippStsSizeErr Indicates an error condition if pRoiSize has a field with
zero or negative value.
ippStsStepErr Indicates an error condition if srcStep or dstStep is less
than pRoiSize.width * <pixelSize>.
ippStsNotEvenStepErr Indicates an error condition if steps for floating-point
images are not divisible by 4.
ippStsBadArgErr Indicates an error condition if stage is not equal to
IPP_START, IPP_MIDDLE, IPP_END or IPP_WHOLE.

IP
rope
Участник
увага! пускаем бобров!
licq:1607
ничего себе любтельская ветка программистов CPP

To B-Nom
ну раз на то пошло, есть еще и NPP, правда видюха нужна...

в любом случае в ipp должна быть просто свертка, я бы посоветовал пользоваться ей, т.к. ядро
1 1 1
1 1 1
1 1 1 хоть и будет выполнять данную задачу, визуально будет давать менее приятную картинку, чем гаусс

To Pavia
насколько я помню в тамошнем SDK есть только opencl код, который имеет смысл запускать только на opencl поддерживающей видюхе (не у каждого такая есть). на проце тот же ipp будет явно выигрывать
Сообщение изменено rope от 2010-03-20 16:28:16
IP
Pavia
Участник
программирование
licq:1754
To rope
А ты повнимательнее исходный код посмотри. ;-)



код:
void 
RecursiveGaussian::recursiveGaussianCPU(cl_uchar4* input, cl_uchar4* output,
const int width, const int height,
const float a0, const float a1,
const float a2, const float a3,
const float b1, const float b2,
const float coefp, const float coefn)
{

/* outer loop over all columns within image */
for (int X = 0; X < width; X++)
{
// start forward filter pass
float xp[4] = {0.0f, 0.0f, 0.0f, 0.0f}; // previous input
float yp[4] = {0.0f, 0.0f, 0.0f, 0.0f}; // previous output
float yb[4] = {0.0f, 0.0f, 0.0f, 0.0f}; // previous output by 2

float xc[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float yc[4] = {0.0f, 0.0f, 0.0f, 0.0f};

for (int Y = 0; Y < height; Y++)
{
/* output position to write */
int pos = Y * width + X;

/* convert input element to float4 */
xc[0] = input[pos].s[0];
xc[1] = input[pos].s[1];
xc[2] = input[pos].s[2];
xc[3] = input[pos].s[3];

yc[0] = (a0 * xc[0]) + (a1 * xp[0]) - (b1 * yp[0]) - (b2 * yb[0]);
yc[1] = (a0 * xc[1]) + (a1 * xp[1]) - (b1 * yp[1]) - (b2 * yb[1]);
yc[2] = (a0 * xc[2]) + (a1 * xp[2]) - (b1 * yp[2]) - (b2 * yb[2]);
yc[3] = (a0 * xc[3]) + (a1 * xp[3]) - (b1 * yp[3]) - (b2 * yb[3]);

/* convert float4 element to output */
output[pos].s[0] = (cl_uchar)yc[0];
output[pos].s[1] = (cl_uchar)yc[1];
output[pos].s[2] = (cl_uchar)yc[2];
output[pos].s[3] = (cl_uchar)yc[3];

for (int i = 0; i < 4; i++)
{
xp[i] = xc[i];
yb[i] = yp[i];
yp[i] = yc[i];
}
}

// start reverse filter pass: ensures response is symmetrical
float xn[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float xa[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float yn[4] = {0.0f, 0.0f, 0.0f, 0.0f};
float ya[4] = {0.0f, 0.0f, 0.0f, 0.0f};


float fTemp[4] = {0.0f, 0.0f, 0.0f, 0.0f};

for (int Y = height - 1; Y > -1; Y--)
{
int pos = Y * width + X;

/* convert uchar4 to float4 */
xc[0] = input[pos].s[0];
xc[1] = input[pos].s[1];
xc[2] = input[pos].s[2];
xc[3] = input[pos].s[3];

yc[0] = (a2 * xn[0]) + (a3 * xa[0]) - (b1 * yn[0]) - (b2 * ya[0]);
yc[1] = (a2 * xn[1]) + (a3 * xa[1]) - (b1 * yn[1]) - (b2 * ya[1]);
yc[2] = (a2 * xn[2]) + (a3 * xa[2]) - (b1 * yn[2]) - (b2 * ya[2]);
yc[3] = (a2 * xn[3]) + (a3 * xa[3]) - (b1 * yn[3]) - (b2 * ya[3]);

for (int i = 0; i< 4; i++)
{
xa[i] = xn[i];
xn[i] = xc[i];
ya[i] = yn[i];
yn[i] = yc[i];
}

/* convert uhcar4 to float4 */
fTemp[0] = output[pos].s[0];
fTemp[1] = output[pos].s[1];
fTemp[2] = output[pos].s[2];
fTemp[3] = output[pos].s[3];

fTemp[0] += yc[0];
fTemp[1] += yc[1];
fTemp[2] += yc[2];
fTemp[3] += yc[3];

/* convert float4 to uchar4 */
output[pos].s[0] = (cl_uchar)fTemp[0];
output[pos].s[1] = (cl_uchar)fTemp[1];
output[pos].s[2] = (cl_uchar)fTemp[2];
output[pos].s[3] = (cl_uchar)fTemp[3];
}
}

}

void
RecursiveGaussian::transposeCPU(cl_uchar4* input,
cl_uchar4* output,
const int width,
const int height)
{
/* transpose matrix */
for(int Y = 0; Y < height; Y++)
{
for(int X = 0; X < width; X++)
{
output[Y + X*height] = input[X + Y*width];
}
}
}

void
RecursiveGaussian::recursiveGaussianCPUReference()
{

/* Create a temp uchar4 array */
cl_uchar4* temp = (cl_uchar4*)malloc(width * height * sizeof(cl_uchar4));
if(temp == NULL)
{
sampleCommon->error("Failed to allocate host memory! (temp)");
return;
}

std::string inputImageName = "RecursiveGaussian_Input.bmp";
std::string filePath = sampleCommon->getPath() + inputImageName;

/* Load the image again */
inputBitmap.load(filePath.c_str());
if(!inputBitmap.isLoaded())
{
sampleCommon->error("Failed to load input image!");
return;
}

/* if image is loaded */
pixelData = inputBitmap.getPixels();

/* Copy pixel data into inputImageData */
memcpy(inputImageData, pixelData, width * height * sizeof(cl_uchar4));

/* Call recursive Gaussian CPU */
recursiveGaussianCPU(inputImageData, temp, width, height,
oclGP.a0, oclGP.a1, oclGP.a2, oclGP.a3,
oclGP.b1, oclGP.b2, oclGP.coefp, oclGP.coefn);

/* Transpose the temp buffer */
transposeCPU(temp, verificationOutput, width, height);

/* again Call recursive Gaussian CPU */
recursiveGaussianCPU(verificationOutput, temp, height, width,
oclGP.a0, oclGP.a1, oclGP.a2, oclGP.a3,
oclGP.b1, oclGP.b2, oclGP.coefp, oclGP.coefn);

/* Do a final Transpose */
transposeCPU(temp, verificationOutput, height, width);

if(temp)
free(temp);

}

void
RecursiveGaussian::computeGaussParms(float fSigma, int iOrder, GaussParms* pGP)
{
// pre-compute filter coefficients
pGP->nsigma = fSigma; // note: fSigma is range-checked and clamped >= 0.1f upstream
pGP->alpha = 1.695f / pGP->nsigma;
pGP->ema = exp(-pGP->alpha);
pGP->ema2 = exp(-2.0f * pGP->alpha);
pGP->b1 = -2.0f * pGP->ema;
pGP->b2 = pGP->ema2;
pGP->a0 = 0.0f;
pGP->a1 = 0.0f;
pGP->a2 = 0.0f;
pGP->a3 = 0.0f;
pGP->coefp = 0.0f;
pGP->coefn = 0.0f;

switch (iOrder)
{
case 0:
{
const float k = (1.0f - pGP->ema)*(1.0f - pGP->ema)/(1.0f + (2.0f * pGP->alpha * pGP->ema) - pGP->ema2);
pGP->a0 = k;
pGP->a1 = k * (pGP->alpha - 1.0f) * pGP->ema;
pGP->a2 = k * (pGP->alpha + 1.0f) * pGP->ema;
pGP->a3 = -k * pGP->ema2;
}
break;
case 1:
{
pGP->a0 = (1.0f - pGP->ema) * (1.0f - pGP->ema);
pGP->a1 = 0.0f;
pGP->a2 = -pGP->a0;
pGP->a3 = 0.0f;
}
break;
case 2:
{
const float ea = exp(-pGP->alpha);
const float k = -(pGP->ema2 - 1.0f)/(2.0f * pGP->alpha * pGP->ema);
float kn = -2.0f * (-1.0f + (3.0f * ea) - (3.0f * ea * ea) + (ea * ea * ea));
kn /= (((3.0f * ea) + 1.0f + (3.0f * ea * ea) + (ea * ea * ea)));
pGP->a0 = kn;
pGP->a1 = -kn * (1.0f + (k * pGP->alpha)) * pGP->ema;
pGP->a2 = kn * (1.0f - (k * pGP->alpha)) * pGP->ema;
pGP->a3 = -kn * pGP->ema2;
}
break;
default:
// note: iOrder is range-checked and clamped to 0-2 upstream
return;
}
pGP->coefp = (pGP->a0 + pGP->a1)/(1.0f + pGP->b1 + pGP->b2);
pGP->coefn = (pGP->a2 + pGP->a3)/(1.0f + pGP->b1 + pGP->b2);
}

IP
hyper
Участник
Учите матчасть - вдруг вас разбудят ночью, а вам и
licq:4421
блин...ничего не понимаю =(
я в программировании на начальном уровне, а тут такое дело дали...
неужто все ленивые такие?)пожаалууустаа..
IP
Ar@kel
Участник
licq:6610
To hyper
если хочешь сам понять как и че могу дать совет
1) читаешь про мат обработку сигнала до тех пор пока не станут понятными слова и словосочетания: Теорема Котельникова, Дискретное преобразование Фурье, Свертка, дискретизация и тп
2) На основе полученных знаний прикидываешь математику того чего тебе надо сделать
3) переносишь её на уровень кода.
Ну или гуглишь по теме blur c++ bmp ишешь какую нить библиотеку с функцией
blur (filename, a,b,c);
и не напрягая мозг двигаешь через терни к звездам.
IP
rope
Участник
увага! пускаем бобров!
licq:1607
To Pavia
а, ну не знал
в любом случае, где sse?
зато, в качестве бонуса, делают два горизонтальных, чтобы кеш не прокакать

To hyper
я так понимаю тебе эта тема больше не понадобится? тогда можешь перейти сразу к гуглению кода
http://cimg.sourceforge.net/reference/group__cimg__tutorial.html например. Там есть кусок кода который все сделает
ух ты, она дажа lgpl, совсем шикарно
IP
Pavia
Участник
программирование
licq:1754
To rope
Кэш как-раз они профукали при транспонировании у них 2 цикла вместо 4.


цитата:
я так понимаю тебе эта тема больше не понадобится? тогда можешь перейти сразу к гуглению кода http://cimg.sourceforge.net/reference/group__cimg__tutorial.html например. Там есть кусок кода который все сделает ух ты, она дажа lgpl, совсем шикарно

Не лень тебе было гуглить. А вот hyper лень. А не найти код это еще постараться надо. Сам знаю мест 5 ой нет 6 где точно лежит код. А их сто пудов больше.
IP
human_voice
Участник
сатрап
To hyper
Вот здесь возьми чё тебе надо, прочитай и спиши всякие умные слова в свою работу и сдай.
ЗЫ.
Все исходники испытаны в VC6 и полностью работоспособны.
IP
Dрейк
Участник
余凤梨
Ребят, дайте совет:
В школе учу паскаль, и думаю, что дальше лучше учить делфи. Но интересно и с++, да и уже начал читать книгу . Какой вариант для меня лучше?
IP
Pavia
Участник
программирование
licq:1754
To Dрейк
Delphi не учи. Учи сразу С++ чтобы не переучиваться или Java тоже перспективна. Учи С++ сразу и для Виндоуса и для Линукса.
В виндоуса разработка дефакто ведется в Visual Studio. 2008 очень удобна по сравнению с предыдущими. Для Линукса компилятор gcc, а вот среду не по советую. А также QT тоже изучай это библиотека и среда для кросплатформеной разработке.
IP
Dрейк
Участник
余凤梨
И кстати, насчет Линукса, чем отличается от винды?
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
To Pavia
Во-первых, не QT, а Qt. QT == QuickTime.
Во-вторых, язык и платформа никак не соприкасаются. Важны библиотеки. Тот же Qt, да.

А за совет начинающему учить С++ в приличном обществе бьют по лицу книгой Dive into Python.
To Dрейк
В каком классе учишься ? Какая школа, кто учитель ?
Чем Линукс отличается от венды сам увидишь, возьми и установи.
Delphi, Java, Qt, etc - суть голая технология, она никому не нужна. Выучи основы, где их применять всегда найдешь.
Для школьника язык пока не важен, паскаль, кстати, неплохой выбор, усвой основные алгоритмы, если хватит ума и усидчивости, осиль Д.Кнута(про ум не сочти за оскорбление - очень мало кто осиливает, и я тоже не в их числе, после 2 томов слился), после обрати внимание на функциональные языки. После этого ты будешь обладать достаточным кругозором для того чтобы понять что тебе нужно.
Сообщение изменено DarthVader от 2010-03-29 01:37:11
IP
Quercus
Участник
licq:1887
To Dрейк
To DarthVader
Опасаюсь советовать, что именно нужно изучать, отмечу только, что знание алгоритмов в реальной работе не нужно (при всем уважении к Кнуту) по двум причинам - первая: они все уже реализованы в библиотеках; вторая: если все же понадобится - есть интернет и гугл.
А вот знание технологий гораздо важней - на первом месте среди них, безусловно, ООД (поскольку все остальное на нем лежит).
С другой стороны, изучение алгоритмов даст общие знания о приемах программирования и навык алгоритмизации поставленной задачи.
Если же выбирать язык, то я бы советовал C# (или Java, если где-то в глубине души теплится мысль, что удастся где-нить за деньги программить под Unix-системы). Он будет и проще чем C++ и изначально поддерживает обширный спектр технологий.
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
To Quercus
цитата:
отмечу только, что знание алгоритмов в реальной работе не нужно

Следуюший! Формочки в дельфи может и секретарша лепить.

Всё остальное не по теме, вопрос был про обучение, а у тебя мутные рассуждения про будущее. В дебри ООП лезть сначала не надо, незачем человека путать.
Сообщение изменено DarthVader от 2010-03-29 11:32:41
IP
Dрейк
Участник
余凤梨
Спасибо ребят) Пойду читать, и обогащаться знаниями!
IP
Quercus
Участник
licq:1887
To DarthVader
Речь идет не о "лепить формочки", а о том, что алгоритмы Кнута, по существу, алгоритмы вычислительные и алгоритмы работы со структурами данных, и если вдруг возникает задача из этой серии, можно зайти в гугл, найти нужный алгоритм и применить, даже если не знал что такой алгоритм есть.
А вот с технологиями не так - если ты не знаешь про некую технологию, то и не сможешь ее применить, поскольку попросту не будешь знать что в гугле искать.

IP
Pavia
Участник
программирование
licq:1754
To DarthVader
Delphi'ская привычка не различать регистр. :-P Удобно.
цитата:
А за совет начинающему учить С++ в приличном обществе бьют по лицу книгой Dive into Python.
Странное общество у вас.

цитата:
Для школьника язык пока не важен,
В школьном возрасте закладывается базис. Поэтому выбор языка(ов) важен.

цитата:
после обрати внимание на функциональные языки.

Паскаль ему и так преподадут. А научиться ООП ему нужно.

цитата:
Delphi, Java, Qt, etc - суть голая технология, она никому не нужна.
Вы с какой планеты сударь? Алгоритмы можно и на листочке писать. А вот если реально что-то хотите сделать то нужно знать технологии.

Единственное что скажу так алгоритмы учить надо. Пожалуй с этим согласны все. Но Кнут это не то что нужно. Как по мне тут надо дать как можно больше обзор алгоритмов, а Кнут сосредоточился не на том что нужно.
Под обзором понимается помимо чистого изучения еще и решение задач.
IP
Pavia
Участник
программирование
licq:1754
To Quercus
цитата:
Если же выбирать язык, то я бы советовал C#

Темная лошадка. Не знаешь куда зайдет. Я в начале бы тоже хотел порекомендовать вместо C++ учить его. Но потом прагматичность сказала свое.
IP
human_voice
Участник
сатрап
адназначна, плюсЫ. Причем, сначала на простых сях что ни буть написать.. ну, типа, консольное. Это, типа, что бы понять, что жизнь медом не казалась и код писать - это не в аське трындеть. Выбрать для этого IDE, которая бы приучила к аккуратности, но без мазохизьма типа GCC, Выбор наверняка падет на M$VS. Поставить туда полезняшки, типа VisuaAssist От консолей быстренько перейти к MFC. А дальше... Дальше придется выбирать чем хлеб зарабатывать будем. В зависимости от от области деятельности можно уже выбирать с какими примитивами и на каком уровне абстракции жизнь заставит работать и жить. Вот под упомянутый Intel IPP, вообще придется линять с микрософтового струмента на евонный родной компиллер... но только после тренировки на кошках(MSVS&MFC). Кстати, наибольшее количество исходников с описанием алгоритмов в сети сделано и раздается на С++. Грех повторно не использовать.
IP
Quercus
Участник
licq:1887
To Pavia
Плюсы для новичка хуже чем C#, придется за памятью следить, да и различные виды приложений пробовать тяжелей, скажем, на шарпе можно без проблем и консольку сделать, и win-приложение, и с базой поиграться, и web-сервис написать и клиент-сервер накидать. На плюсах конечно тоже подо все библиотеки есть, но будет сложней, но наловить непонятных ошибок в плюсах будет значительно легче.
IP
rope
Участник
увага! пускаем бобров!
licq:1607
такого убогого холивара я еще не видел
IP
Ar@kel
Участник
licq:6610
посоветуйте какие нить книги про qt.
естественно интересует работы с gui и события.
IP
smb-
Участник
*nix, music...
licq:3586
To Ar@kel
Да в общем-то имхо любая подойдёт + примеры/оффдоки. Всё равно вся суть в конкретных сигналах/слотах, биндить-то их просто
Я честно говоря не очень доверял гуерисовалкам аля qt designer, поэтому все формы и коннекты руками прописывал, чего и тебе советую, по крайней мере на первое время.
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
To Ar@kel
Бланшет, Саммерфилд. Qt 4.
Могу отдать за пару сотен (:
IP
Ar@kel
Участник
licq:6610
To DarthVader
To smb-
купил Макса Шлее Qt 4.5
Понятным языком все написано, много примеров. Думаю за пару неделек неспеша буду в состоянии делать адекватные вещи. Особенно понравилась система сигнал - слот, думал будет сложнее - оказалось все просто и гениально.
IP
smb-
Участник
*nix, music...
licq:3586
To Ar@kel
На самом деле, это самая удобная система. Читал недавно от скуки (ну или для работы) про, простите, C# 3.5 с events+delegates - плевался. Как бы это покультурней сказать..Фиг поймёшь, ну нихера неочевидно после Qt. Понагородили говна...Если брать джаву - хз чем там это реализуется. Нативно видимо ничем...

А вообще, в Qt есть всякие нетривиальные вещи в духе метаклассов и прочего, но они могут быть совсем не нужны для большинства вещей....
Контейнеры там все тоже простые, строки удобные...

Из сложного остаётся только осознать лайаут манагеры всякие, ну и всё. Можно идти прогать за неплохие деньги, хотя в России вроде этот рынок не очень развит.
Сообщение изменено smb- от 2010-04-06 23:28:51
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
To smb-
Лично мне события и делегаты C# интуитивно понятны в отличие от слотов Qt.
Да лэйаут менеджеры тоже абсолютно естественны.
Так что у каждого человека голова работает в разную сторону (:

ЗЫ разве в жабе нет events ?

ЗЫЗЫ главная проблема Qt - C++.
IP
Dazzle
Новичок
licq:2739
Народ вот такая проблемка.Сижу на visual studio 2008.До этого момента путь к файлу в функцию CopyFile вбивал руками соответственно ,чтобы не ругался LCPSTR ставил перед строчкой L. Вопрос в следующем:как этот самый литерал впихнуть перед переменной?? Чтобы не писало ошибку с LCPSTR.
IP
DarthVader
Участник
!иɔоɔ и инǝvоʞ ɐн
To Dazzle
sYourVar = L"/etc/myprog.conf"

Ничего не понял. Ты так хочешь сделать ?

Сообщение изменено DarthVader от 2010-04-13 15:16:34
IP
Dazzle
Новичок
licq:2739
To DarthVader
Вобщем в кратце..Есть форма.На ней помещён openFileDialog. После показа диалога соответственно заполняется его FileName = путь к файлу. Сам FileName я перевел из System::String^ в char. И этот самый char мне нужно указать в качестве пути. Вобщемто все это делается для того , чтобы создать n-ое количество копий файла выбраного пользователем ))
P.S. щас попробую твой вариант мб реал поможет
IP
BLExeR
Участник
licq:12886
To Dazzle
MultiByteToWideChar
WideCharToMultiByte - это, грубо говоря, для перевода ANSI <-> UNICODE.

Функции CopyFile на самом деле не существует - это макрос. Ссылается он либо на CopyFileA (параметры такие же, но строки - ANSI), либо на CopyFileW (строки - UNICODE). И так с большинством функций WinAPI, работающих со строками.

Варианта два - либо конвертировать строку с помощью вышеуказанных функций (или их оберток), либо использовать CopyFileA/CopyFileW напрямую.

p.s. C++ .NET - настоящий кошмар))
p.p.s. Раз .NET - посмотри еще в MSDN на тему маршаллинга и Platform Invoke. Фреймворк умеет сам правильно работать со строками.

И еще, вдогонку... System::IO::File::Copy().
Сообщение изменено BLExeR от 2010-04-13 19:10:27
IP
Dazzle
Новичок
licq:2739
To BLExeR
спс вроди боле мене разобрался
IP
ViZ
Участник
Сила - ничто! Главное - склонность к самоанализу
licq:3220
привет) кто-нибудь может рассказать, как писать в бмп файл?

есть двумерный массив D[X][Y] структур:
struct Dots{
int Red;
int Green;
int Blue;
}
fwrite() подойдет?
IP
unnAm3d
Участник
х3
To ViZ
fwrite - пойдет. только глянь что нужно в header битмапа писать.
А вообще используй что-нибудь типа http://sourceforge.net/projects/easybmp/
так проще.
IP
ViZ
Участник
Сила - ничто! Главное - склонность к самоанализу
licq:3220
подскажите, в чем баг:
на VS :
выскакивает : Необработанное исключение в "0x742a63b1" в "bluringBMP.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc".

как исправить?(где-то на cin>> выпадает)
IP
Страницы(14): 1 2 ... 11 12 13 14 | перейти:

Хотите создавать темы и отправлять сообщения? Выполните Вход или Зарегистрируйтесь!




Напишите нам

µƒorum © fryazino.net