Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: (ст?) Работа с HBITMAP и массивом яркостей  (Прочитано 7047 раз)
0 Пользователей и 1 Гость смотрят эту тему.
volkov75
Гость
« : 04-05-2007 17:06 » 

Класс CWorkBin предназначен для работы с файлом, в котором находиться массив яркостей, т.е. яркость от 0 до 255.
Этот класс позволяет загрузить массив в ОП и привести действия поворот в право и на лево 90 градусов ,поворот 180 и
отображение по вертикали и горизонтали. А так же преобразование его в файл BMP.
Я буду описывать функции, а в конце приведу полный текст класса.

Для чтения массива яркостей используется функция
Код:
----- WorkBin.h -----
byte* LoadFromFile(CString strFileName);
----- WorkBin.h -----
Код:
----- WorkBin.cpp -----
byte* CWorkBin::LoadFromFile(CString strFileName)
{
         byte* buf1;
buf1 = NULL;
CFile InFile(strFileName,CFile::modeRead|CFile::typeBinary);
l_FileSize = (UINT)InFile.GetLength();
Height = int(l_FileSize/Width);
buf1 = (byte*)malloc(l_FileSize);
if (!buf1)
{
InFile.Close();
return NULL;
}
InFile.Read(buf1,l_FileSize);
InFile.Close();
return buf1;
}
----- WorkBin.cpp -----
Возвращает адрес на массив и заполняет локальные переменные
Код:
----- WorkBin.h -----
private:
// Длина файла массива яркостей
UINT l_FileSize;
// Ширина массива
int Width;
// Высота массива
int Height;
----- WorkBin.h -----
Для сохранения массива яркостей используется функция
Код:
----- WorkBin.h -----
        // Сохранения массива яркостей в бинарный файл
int SaveToFile(byte* buf,CString strFileName);
----- WorkBin.h -----
Код:
----- WorkBin.cpp -----
int CWorkBin::SaveToFile(byte* buf,CString strFileName)
{
CStringA strTemp;
FILE *fHandle;
strTemp = strFileName;
if (l_FileSize != 0)
{
fopen_s(&fHandle,strTemp,"wb");
fwrite(buf,l_FileSize,1,fHandle);
fclose(fHandle);
return 0;
}
else
return -1;
}
----- WorkBin.cpp -----

Поворот в право и на лево 90 градусов ,поворот 180 объедены в одну функцию, а тип поворота задается параметром, который должен иметь значения из объединения

Код:
----- WorkBin.h -----
public:
enum {
  R_Right90    =    (int) 0x00000, // Поворот вправо 90
  R_Left90     =    (int) 0x00001, // Поворот влево 90
  R_Angle180   =    (int) 0x00002, // Поворот на 180
};

// Повороты массива яркостей на углы -90, +90, +180
int RotateBin(byte* buf,int Width,int Height,int Pref,UINT TypeRoute);
int RotateBin(byte* buf,int Width,int Height,UINT TypeRoute);
----- WorkBin.h -----

----- WorkBin.cpp -----
int  CWorkBin::RotateBin(byte* buf,int Width,int Height,int Pref,UINT TypeRoute)
{
byte* buf1;
UINT m_Len;
int x,y,ind1,ind2;

m_Len = Width*Height;
// Проверка
if (m_Len == 0
{
return -1;
}
buf1 =  (byte*)malloc(m_Len);
if (!buf1)
{
return -1;
}
// Копировать массив яркостей
::memcpy(buf1,buf,m_Len);)
switch (TypeRoute)
{
case R_Right90:
for (y = 0; y < Height; y++)
for (x = 0; x < Width; x++)
{
ind1 = Pref+x*Height+((Height-1)-y);
ind2 = y*Width+x;
buf[ind1] = buf1[ind2];
}
this->Width = Height;
this->Height = Width;
break;
case R_Left90:
for (y = 0; y < Height; y++)
for (x = 0; x < Width; x++)
{
ind1 = Pref+((Width-1)-x)*Height+y;
ind2 = y*Width+x;
buf[ind1] = buf1[ind2];
}
this->Width = Height;
this->Height = Width;
break;
case R_Angle180:
for (y = 0; y < Height; y++)
for (x = 0; x < Width; x++)
{
ind1 = Pref+((Width-1)-x)+((Height-1)-y)*Width;
ind2 = y*Width+x;
buf[ind2] = buf1[ind1];
}
break;
default:
break;
}
delete buf1;
return 0;
}
int CWorkBin::RotateBin(byte* buf,int Width,int Height,UINT TypeRoute)
{
return RotateBin(buf,Width,Height,0,TypeRoute);
}
----- WorkBin.cpp -----
Продожение следует....
« Последнее редактирование: 04-05-2007 19:47 от volkov75 » Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 04-05-2007 17:24 » 

volkov75, а напиши в виде статьи, с теорией и рассказом, что с чем едят )  Было бы здоррово...
Записан

Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 04-05-2007 19:20 » 

volkov75, давай сделаем так...
во первых грамматические ошибки, это ладно, подправим.
во вторых , ТЕОРИЯ. Я вот, например, не знаю , что такое массив яркостей. А вдруг это что то интересное ? Объясни на пальцах тоже хотя бы )
Также - область применения, красочные примеры )

а то ещё и приложение в виде экзешника, в котором использован класс, и несколько кнопок там, которые что нибудь демонстрируют

Смотри лс , там подробнее
« Последнее редактирование: 04-05-2007 19:23 от Алексей1153++ » Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines