Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.17;
Скачать: CL | DM;

Вниз

Си и Delphi   Найти похожие ветки 

 
DmitriyR   (2009-04-02 12:24) [0]

Есть код на Си:
{
int y,x;
unsigned char colors[3];
unsigned short encoded;
unsigned char data[1200];

for (y=0; y < 30; y++) {
 for (x=0; x < 20; x++) {
  encoded = ((unsigned short *)data)[((300-(y+1))*200)+x];
  colors[0] = (encoded << 3) & 0xF8;
  colors[1] = (encoded >> 3) & 0xFC;
  colors[2] = (encoded >> 8) & 0xF8;
 }
}
}
Пытаюсь перевести его на дельфи:
var
y,x: integer;
colors: array[0..2] of byte;
encoded: word;
data: array[0..1199] of byte;
begin
 for y := 0 to 30 do
  for x := 0 to 20 do
   begin
    encoded := Вот тут я несовсем понимаю что происходит :(
    colors[0] := (encoded Shl 3) And $F8;
    colors[1] := (encoded Shr 3) And $FC;
    colors[2] := (encoded Shl 8) And $F8;
   end;
end;
Знающие подскажите как доделать недостающее, и правильно ли я переделал имеющееся?


 
clickmaker ©   (2009-04-02 12:32) [1]

encoded := data[((300-(y+1))*200)+x]; ?
не понятно, правда, зачем там приведение к указателю... может, опечатка?


 
DmitriyR   (2009-04-02 12:44) [2]

Нет не опечатка работает ведь.
как я понял
encoded - word 2 byte
массив data - из 1 байтных
тоесть тут типо берет по 2 байта из дата  и передает в ворд виде в енкодед?


 
clickmaker ©   (2009-04-02 12:47) [3]

а, ну да, по 2 байта.
ну в принципе, чтобы не париться с указателями, можно так
encoded := data[((300-(y+1))*200)+x] or (data[((300-(y+1))*200)+x + 1] shl 8);


 
clickmaker ©   (2009-04-02 12:54) [4]

либо как-то так
encoded := PWordArray(@data[0])[((300-(y+1))*200)+x];


 
И. Павел   (2009-04-02 13:00) [5]

for y := 0 to 30 do - цикл от 0 до 30
for (y=0; y < 30; y++)  - цикл от 0 до 29


 
DmitriyR   (2009-04-02 13:12) [6]

И. Павел
Спасибо, но это понятно просто когда набирал поторопился.


 
DmitriyR   (2009-04-02 14:33) [7]

clickmaker
Неработает :( всмысле работает но не так как надо :(

Есть кто в Си разбирается?


 
Rouse_ ©   (2009-04-02 14:42) [8]

Сишный код полностью покажи, а то не понятно что есть data


 
clickmaker ©   (2009-04-02 14:42) [9]

> всмысле работает но не так как надо

а не потому что здесь
colors[2] := (encoded Shl 8) And $F8;
должно быть Shr ?


 
KSergey ©   (2009-04-02 15:15) [10]

> Rouse_ ©   (02.04.09 14:42) [8]
> Сишный код полностью покажи, а то не понятно что есть data

из стартового поста
unsigned char data[1200];


 
Игорь Шевченко ©   (2009-04-02 15:19) [11]


>   colors[0] = (encoded << 3) & 0xF8;


а это вообще бред


 
Игорь Шевченко ©   (2009-04-02 15:21) [12]


> begin
>  for y := 0 to 30 do
>   for x := 0 to 20 do
>    begin
>     encoded := Вот тут я несовсем понимаю что происходит
> :(
>     colors[0] := (encoded Shl 3) And $F8;
>     colors[1] := (encoded Shr 3) And $FC;
>     colors[2] := (encoded Shl 8) And $F8;
>    end;
> end;


to 30 - 1
to 20 - 1


 
DmitriyR   (2009-04-02 18:01) [13]


> а это вообще бред

несовсем, тоесть все там номано.
Код урезан но самое нужное тут.
В дате считаный файл, после прогона его енкодером Си-шным
получаю файл (картинка.bmp) черезстрочка


> всмысле работает но не так как надо

потому что если в оригинале получаю катинку (черезстрочную) но полную
а в переработаном варианте получаю только ее часть с искаженным цветом.
(правильно говоря один угод 1/4 картинки с шагом через 3 строчки.)

Черезстрочка: 1строка пиксели рисунка, 2 пустая, 3 пиксели, 4 пустая и т.д.

Через 3 строчки: строка пиксели, 3 строки пустых, и т.д.


> Сишный код полностью покажи, а то не понятно что есть data

в коде перед циклами стоит чтение файла (тоесть в дата считывается файл закодированый).
после colors[2] следующая строка стоит запись в новый файл содержимого colors. тоесть на выходе получаю файл.bmp

вот почти полный код:

input=fopen("test.dat","rb");
fread(data, 1, datalen, input);
output=fopen("test.bmp","wb");
fwrite(bmphead1, 1, sizeof(bmphead1), output);
fwrite(&biWidth, 1, sizeof(biWidth), output);
fwrite(&biHeight, 1, sizeof(biHeight), output);
biSize = biWidth*biHeight*3;
fwrite(&biSize, 1, sizeof(biSize), output);
fwrite(bmphead3, 1, sizeof(bmphead3), output);
for (y=0; y < biHeight; y++) {
for (x=0; x < biWidth; x++) {
  encoded = ((unsigned short *)data)[((biHeight-(y+1))*biWidth)+x];
  colors[0] = (encoded << 3) & 0xF8;
  colors[1] = (encoded >> 3) & 0xFC;
  colors[2] = (encoded >> 8) & 0xF8;
  fwrite(colors, 1, 3, output);
}
}
fclose(output);
fclose(input);


 
Игорь Шевченко ©   (2009-04-02 19:52) [14]


> тоесть все там номано.


ну парься тада



Страницы: 1 вся ветка

Текущий архив: 2009.05.17;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.011 c
2-1238930346
jonin
2009-04-05 15:19
2009.05.17
Диспечер задачь - > Сеть


2-1238655986
bobwild
2009-04-02 11:06
2009.05.17
Импорт записей в главную и подчиненную таблицы из файла


15-1236871256
It's not me
2009-03-12 18:20
2009.05.17
Делимость бита


15-1237156549
Германн
2009-03-16 01:35
2009.05.17
Это интересно


10-1156692481
AlexeyT
2006-08-27 19:28
2009.05.17
Вопрос по Windows Media Player 9