Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2009.05.17;
Скачать: [xml.tar.bz2];

Вниз

Си и 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.004 c
4-1209896743
avers_sm
2008-05-04 14:25
2009.05.17
Какой тип имеют окна значков в системном трее?


2-1238783224
Enum
2009-04-03 22:27
2009.05.17
Перехват события


15-1237283751
Rouse_
2009-03-17 12:55
2009.05.17
Завтрашний семинар в Москве


2-1232978119
anton shestakov
2009-01-26 16:55
2009.05.17
Фильтрация в базе


2-1237276874
Cabyrc
2009-03-17 11:01
2009.05.17
связь с БД





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский