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]);
Из StringGreed в BitMap
Код:
Ясно, что в битмапе 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;
{
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);
unsigned char c=*(ptr2+x-1);
так вот
i получает то же значение, что и вводилось (например, 226), а c - символ, код которого на 64 меньше (например, 'в',который равен 162).
Решение
Все, разобрался, делается серая палитра и используется для нового битмапа