void Zoom(struct BMP *lol, int k) // масштабирование
{
int r, g, b, end; //Объявление указателя для переменной типа int
if (k > 1)
{
BMP *TMP; (*this);// создание временного изображения
// задание новых размеров и изменение данных о изображении
lol->biWidth = lol->biWidth * k;
lol->biHeight = lol->biHeight * k;
lol->bfSize = lol->biHeight * lol->biWidth * 3 + 54; //Смещение, с которого начинается само изображение равно 54
lol->biSizeImage = lol->biHeight * lol->biWidth * 3;
int sz_line = lol->biWidth * 3;
while (sz_line % 4 != 0) sz_line++;
// выравнивание до кратно 4
lol->MBMP = (unsigned char**)malloc(lol->biHeight * sizeof(unsigned char*));
for (int i = 0; i < lol->biHeight; i++)
{
lol->MBMP[i] = (unsigned char*)malloc(sz_line *sizeof(unsigned char));
for (int j = 0; j < sz_line; j++)lol->MBMP[i][j] = 255;
}
// перебор всех пикселей изображения
for (int i = 0; i < TMP.biHeight; i++)
for (int j = 0; j < TMP.biWidth; j++)
{
TMP.GetPixel(j, i, &r, &g, &b);
for (int k1 = 0; k1 < k; k1++)
for (int k2 = 0; k2 < k; k2++)
PutPixelRGB(j*k + k1, i*k + k2, r, g, b);
}
return;
}
//if (k < 0)
//{
// BMP TMP(*this);// создание временного изображения
// // задание новых размеров и изменение данных о изображении
// biWidth = biWidth / -k;
// biHeight = biHeight / -k;
// bfSize = biHeight * biWidth * 3 + 54;
// biSizeImage = biHeight * biWidth * 3;
// int sz_line = biWidth * 3;
// while (sz_line % 4 != 0) sz_line++;
// // выравнивание до СЛОВА (кратно 4)
// MBMP = (unsigned char**)malloc(biHeight * sizeof(unsigned char*));
// for (int i = 0; i < biHeight; i++)
// {
// MBMP[i] = (unsigned char*)malloc(sz_line *sizeof(unsigned char));
// for (int j = 0; j < sz_line; j++)MBMP[i][j] = 255;
// }
// // перебор всех пикселей изображения
// int sr, sg, sb;
// for (int i = 0; i < biHeight; i++)
// for (int j = 0; j < biWidth; j++)
// {
// if (-k % 2 == 0)end = -k / 2;
// else end = -k / 2 + 1;
// sr = 0; sg = 0; sb = 0;
// // обнуление суммы значений цветов пикселей
// for (int k1 = k / 2; k1 < end; k1++)
// for (int k2 = k / 2; k2 < end; k2++)
// if (-j*k + k2 < TMP.biWidth && -i*k + k1 < TMP.biHeight && -i*k + k1 >= 0 && -j*k + k2 >= 0)
// {
// TMP.GetPixel(-j*k + k2, -i*k + k1, &r, &g, &b);
// sr += r; sg += g; sb += b;
// }
// sr = sr / (k*k);
// sg = sg / (k*k);
// sb = sb / (k*k);
// if (sr > 255)sr = 255;
// if (sg > 255)sg = 255;
// if (sb > 255)sb = 255;
// PutPixelRGB(j, i, sr, sg, sb);
// // помещаем новое значение в результирующую матрицу
// }
// return;
//}
free(lol->MBMP);
}
void input(char *arr, int *siz)
{
gets_s(arr, *siz);
}
void dec(char *arr, char *arr_2, int *count)
{
for (*arr; *arr != '\0'; *arr++)
{
if (*arr == *(arr + 1))
{
*count++;
}
if (*arr != *(arr + 1) && *arr == *(arr - 1)){
char c = *count + '0';
*arr_2 = c;
//*(arr_2 +1)= *arr;
////*arr_2 = *arr;
//*arr_2++;
//*count = 0;
}
}
}
void output(char *arr, char *arr_2)
{
printf("%s\n", arr);
printf("%s", arr_2);
//puts(arr_2);
}
void main()
{
int siz = 1024;
char *arr = (char*)malloc(siz*sizeof(char)); //выделям память под динамический массив
int siz_2 = 1024;
char *arr_2 = (char*)malloc(siz_2*sizeof(char));
int count = 0;
input(arr, &siz);
dec(arr, arr_2, &count);
output(arr, arr_2);
free(arr); //освобождаем память
free(arr_2);
system("pause");
}