Форум программистов, компьютерный форум CyberForum.ru

Перевести код программы из Delphi в C++ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Clipboard (запись/чтение) массива структур http://www.cyberforum.ru/cpp-beginners/thread365682.html
Привет, форумчане! Прошу консультации по работе с буфером обмена Windows. Нужно корректно записывать/считывать массив структур определенных мной. По записи/чтении в буфер одного экземпляра структуры вопросов нет. Подскажите как правильно прочитать массив структур из буфера, при условии что записываться в него может различное число экземпляров. Даю свой код для наглядности. Запись ...
C++ Знак _ перед функцией Читал книгу Страуструпа и наткнулся на интересную вещь: он ставил _ перед функцией. Можете объяснить, что делает этот знак? И можно еще пару примеров? http://www.cyberforum.ru/cpp-beginners/thread365672.html
планировщик движения головок C++
Кто-нибудь знает как можно на C++создать планировщик движения головок?? Дисциплина SCAN. Если кто-то знает-помогите пожалуйста!!!!
Ошибка компилятора wxDev-C++ C++
Помогите, написал пример из книги Дейтела Как программировать на С++. Написал все как в примере, при компиляции выдает ошибки: undefined reference to `WinMain@16' ld returned 1 exit status Что делать? Пример из книги во вложении. Если есть точно такая еже тема просьба удалить мою.
C++ Функция генерирует одинаковые случайные числа http://www.cyberforum.ru/cpp-beginners/thread365618.html
Необходимо заполнить три массива произвольного размера случайными числами. Для заполнения массивов написана функция, но при отработке совпадающие по порядковому номеру элементы всех трех массивов заполняются одинаковыми значениями. Как это исправить? #include <iostream.h> #include <math.h> #include <time.h> #include <stdlib.h> int ZapolnenieMassiva (int x) { int *Massive;
C++ блок-схемы нарисовать блок-схему для рограммы: Напишите программу, которая будет определять размер для данных (int, char, long, double, short, unsigned, float) и выводить информацию (о размере данных) на экран. подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
13.10.2011, 15:30     Перевести код программы из Delphi в C++
Цитата Сообщение от mibin Посмотреть сообщение
Palette: array of RGBQUAD;
...
SetLength(Palette, PaletteLength);
C++
1
RGBQUAD * Pallete = (RGBQUAD *)malloc(PaletteLength);
Добавлено через 2 минуты
Цитата Сообщение от mibin Посмотреть сообщение
GetMem(pData, BitmapLength);
ReadFile(BitmapFile, pData^, BitmapLength, ReadBytes, nil);
C++
1
BITMAPINFOHEADER * pData = (BITMAPINFOHEADER *)malloc(BitmapLength);
В типе BITMAPINFOHEADER сомневаюсь возможно и BITMAPINFO

Добавлено через 3 минуты
Цитата Сообщение от mibin Посмотреть сообщение
Line : ^LongWord;
....
* For H:=0 to Height-1 do
* Begin
* * Line :=BMP.scanline[Height-H-1]; * // flip JPEG
* * For W:=0 to Width-1 do
* * Begin
* * * c:=Line^ and $FFFFFF; // Need to do a color swap
* * * Data[W+(H*Width)] :=(((c and $FF) shl 16)+(c shr 16)+(c and $FF00)) or $FF000000; *// 4 channel.
* * * inc(Line);
* * End;
* End;
- думается читаем BmpDib

Добавлено через 2 минуты
Вобщем думаю нужно считать BMP ниже приведу свой класс для чтения битмапов с разными BITMAPINFOHEADER::biBitCount
c_bmp.h
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
#ifndef C_BMP_H
#define C_BMP_H
 
class c_bmp
{
public:
    FILE *f;
    char *chBuf;
    char *chClrTbl;
    DWORD dwLength;
    LPCTSTR fPath;
    BITMAPFILEHEADER pBMPfh;
    BITMAPINFOHEADER pBMPih;
 
    bool LOAD_OK;
    bool SAVE_OK;
    c_bmp();
    ~c_bmp();
    DWORD LoadBMP(LPCTSTR sPath);
    DWORD SaveBMP(LPCTSTR sPath);
};
typedef c_bmp *LPCBMP;
 
#endif


c_bmp.cpp
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
#include "stdafx.h"
#include "c_bmp.h"
 
c_bmp::c_bmp()
{
    fPath    =  "";
    dwLength = -1;
    chBuf    =  NULL;
    LOAD_OK  = false;
    SAVE_OK  = false;
}
 
c_bmp::~c_bmp()
{
    if(0 < dwLength)
        delete chBuf;
}
 
DWORD c_bmp::LoadBMP(LPCTSTR sPath)
{
    LOAD_OK = false;
    if((f = fopen(sPath,"rb+")) != 0)
    {
        fPath = sPath;
        fseek(f,0,SEEK_END);
        dwLength = ftell(f);
        fseek(f,0,SEEK_SET);
        if(sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) < dwLength)
        {
            fread(&pBMPfh,1,sizeof(BITMAPFILEHEADER),f);
            fread(&pBMPih,1,sizeof(BITMAPINFOHEADER),f);
            if(pBMPfh.bfType == 0x4D42
                &&
                pBMPfh.bfSize == dwLength
                &&
                pBMPih.biPlanes == 1)
            {
                int nClrs = 8,nEmpty = 0;
                switch(pBMPih.biBitCount)
                {
                case 24:
                    nEmpty = 4 - (pBMPih.biWidth*3)%4;
                    break;
                case 8:
                    nEmpty = 4 - (pBMPih.biWidth)%4;
                    nClrs = 1024;
                    break;
                case 4:
                    nEmpty = 4 - ((pBMPih.biWidth+1)/2)%4;
                    nClrs = 64;
                    break;
                }
                if(nEmpty == 4)
                    nEmpty = 0;
                chClrTbl = new char[nClrs];
                if(pBMPih.biBitCount <= 8)
                    fread(chClrTbl,1,nClrs,f);
 
                char ch;
                chBuf = new char[3*pBMPih.biWidth*pBMPih.biHeight];
                for(int i = 0,j = 0,k = 0; i< pBMPih.biHeight; i++)
                {
                    for(j = 0; j < pBMPih.biWidth; j++)
                    {
                        switch(pBMPih.biBitCount)
                        {
                        case 24:
                            fread(&chBuf[k],1,1,f);k++;
                            fread(&chBuf[k],1,1,f);k++;
                            fread(&chBuf[k],1,1,f);k++;
                            break;
                        case 8:
                            nClrs = 0;
                            fread(&nClrs,1,1,f);
                            nClrs*=4;
                            chBuf[k]  = chClrTbl[nClrs];
                            chBuf[k+1]= chClrTbl[nClrs+1];
                            chBuf[k+2]= chClrTbl[nClrs+2];
                            k+=3;
                        break;
                        case 4:
                            fread(&nClrs,1,1,f);
                            ch = (char)(nClrs & 0x0F);
                            nClrs = nClrs & 0xF0;
                            nClrs>>=4;
                            nClrs*=4;
                            chBuf[k]  = chClrTbl[nClrs];
                            chBuf[k+1]= chClrTbl[nClrs+1];
                            chBuf[k+2]= chClrTbl[nClrs+2];
                            k+=3;
                            if(j+1 < pBMPih.biWidth)
                            {
                                nClrs = 4*(int)ch;
                                chBuf[k]  = chClrTbl[nClrs];
                                chBuf[k+1]= chClrTbl[nClrs+1];
                                chBuf[k+2]= chClrTbl[nClrs+2];
                                k+=3;
                                j++;
                            }
                            break;
                        }
                    }
                    fseek(f,ftell(f) + nEmpty,SEEK_SET);
                }
                LOAD_OK = true;
                fPath = sPath;
            }
            else
                dwLength = -1;
        }
        else
            dwLength = -1;
        fclose(f);
    }
    return dwLength;
}
 
DWORD c_bmp::SaveBMP(LPCTSTR sPath)
{
 
    BITMAPFILEHEADER *lpBMPfh = new BITMAPFILEHEADER[1];
    pBMPfh = lpBMPfh[0];
 
    pBMPfh.bfType       = 0x4D42;
    pBMPfh.bfReserved1  = 0;
    pBMPfh.bfReserved2  = 0;
    pBMPfh.bfOffBits    = 54;
 
    LONG biWidth  = pBMPih.biWidth;
    LONG biHeight = pBMPih.biHeight;
 
    BITMAPINFOHEADER *lpBMPih = new BITMAPINFOHEADER[1];
    pBMPih = lpBMPih[0];
    pBMPih.biSize       = 40;
    pBMPih.biPlanes     = 1;
    pBMPih.biBitCount   = 24;
    pBMPih.biWidth      = biWidth;
    pBMPih.biHeight     = biHeight;
    pBMPih.biCompression= 0;
    pBMPih.biXPelsPerMeter  = 0;
    pBMPih.biYPelsPerMeter  = 0;
    pBMPih.biClrUsed    = 0;
    pBMPih.biClrImportant= 0;
 
    int nEmpty = 4 - (pBMPih.biWidth*3)%4;
    if(nEmpty == 4)
        nEmpty = 0;
    if(pBMPih.biWidth == 0||pBMPih.biHeight == 0)
        pBMPfh.bfSize = -1;
    else
    {
        if((f = fopen(sPath,"wb+")) != 0)
        {
            pBMPih.biSizeImage = /*sizeof(chBuf)*/ 3*pBMPih.biWidth*pBMPih.biHeight + 
                pBMPih.biHeight*nEmpty;
            pBMPfh.bfSize = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + 
                pBMPih.biSizeImage;
            char *ch = new char[nEmpty];
            fwrite(&pBMPfh,1,sizeof(BITMAPFILEHEADER),f);
            fwrite(&pBMPih,1,sizeof(BITMAPINFOHEADER),f);
            for(int i = 0,j = 0,k = 0; i< pBMPih.biHeight; i++)
            {
                for(j = 0; j < pBMPih.biWidth; j++)
                {
                    fwrite(&chBuf[k],1,1,f);k++;
                    fwrite(&chBuf[k],1,1,f);k++;
                    fwrite(&chBuf[k],1,1,f);k++;
                }
                fwrite(ch,1,nEmpty,f);
            }
            SAVE_OK = true;
            fclose(f);
        }
    }
    return pBMPfh.bfSize;
}
 
Текущее время: 08:00. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru