OlehAlex
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Добрый день всем. Есть проблема Из StringGreed в BitMap Суть программы в следующем. Считываю из файла .bmp изображение InputImage в градациях серого. Заношу значения яркости в StringGreed1. Прделываю некие математические операции над элементами StringGreed1 и результат заношу в StringGreed2. Пока все в порядке. Теперь нужно это новое изображение OutputImage отрисовать -компонент (TImage) и сохранить в файл. Создаю указатель на TBitmap нужного размера и т.д. Вот вывод на экран Код: for (int y = 1; y < N+1; y++) for (int x = 1; x < M+1; x++) OutputImage->Canvas->Pixels[x-1][y-1]=StrToInt(StringGrid2->Cells[x][y]); | Ясно, что в битмапе 1 байт на пиксель, а тут int. Но изображение выводится, красного цвета. Я начал с этого кода, долго парился-все было только хуже. Нужно как-то задействовать TColor-сообщить, что это градации серого. Как это сделать? ЗЫ только что еще попробовал Код: for (int y = 1; y < N+1; y++) { ptr2 = (Byte *)pBitmap2->ScanLine[y-1]; //Получаем указатель на строку for (int x = 1; x < M+1; x++) { t= StrToInt(StringGrid2->Cells[x][y]); *(ptr2+x-1)= t; } } OutputImage->Picture->Bitmap = pBitmap2; | Теперь оно не красное, а многоцветное и как бы выделение контуров. Надо как-то палитру передать новому изображению из старого? И еще. Ввел 2 переменные, одна int, а вторая unsigned char (яркость изменяется в пределах 0-255), чтобы посмотреть значения, которые присвиваются *(ptr2+x-1). Код: int i=*(ptr2+x-1); unsigned char c=*(ptr2+x-1); | так вот i получает то же значение, что и вводилось (например, 226), а c - символ, код которого на 64 меньше (например, 'в',который равен 162). |