nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 26 Apr 2024 23:08



Reply to topic  [ 60 posts ]  Go to page Previous  1, 2, 3, 4
Программное перемещение видеопамяти в РК-совместимых компах 
Author Message
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Shaos wrote:
На стандартном РК-86 можно попробовать интерполировать картинки верхушками букв стандартного шрифта (вроде на зхпк чото такое проскакивало уже):

Image

Это было 4 пикселов в высоту, а вот как если оставить 5 пикселов (60Гц):

Attachment:
Screenshot from 2024-03-23 21-43-59.png
Screenshot from 2024-03-23 21-43-59.png [ 86.12 KiB | Viewed 1879 times ]


Attachments:
test_vinxru_5.zip [2.62 KiB]
Downloaded 15 times

_________________
:dj: https://mastodon.social/@Shaos
23 Mar 2024 21:59
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Для того, чтобы влезть в 50 Гц всё с теми же 5-пиксельными символами, надо увеличить количество текстовых строк:

Attachment:
Screenshot from 2024-03-23 21-57-01.png
Screenshot from 2024-03-23 21-57-01.png [ 96.35 KiB | Viewed 1879 times ]

Напомню что с 4-пиксельными символами влезть в 50 Гц кадровой частоты не получится - максимум 64 текстовых строк дадут почти 60 Гц (см. выше), что соответствует американскому телевизионному стандарту NTSC (а вот частота строк у PAL/SECAM и NTSC почти одинаковая).

_________________
:dj: https://mastodon.social/@Shaos


23 Mar 2024 22:11
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Вот 6-пиксельный вариант (тайлы 6х6 могут пригодиться в будущем, когда у меня появится программно подменяемый шрифт):


Attachments:
Screenshot from 2024-03-24 00-43-26.png
Screenshot from 2024-03-24 00-43-26.png [ 105.6 KiB | Viewed 1868 times ]

_________________
:dj: https://mastodon.social/@Shaos
24 Mar 2024 00:52
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Пробую рисовать картинки 5-строчными кусочками стандартных символов:



Каждое знакоместо делим на 2 вертикальных половинки - в каждой будет 3*5=15 пикселов, которые могут изображать яркости от 0 до 15 (16 градаций серого), но не все комбинации яркостей таким образом можно изобразить (коих в пределе должно быть 256) - вот таблица того, какие пары покрывает стандартный знакогенератор РК будучи подрезан до 5 пикселов в высоту (первая яркость даёт вертикальное число, а вторая яркость - горизонтальное, а число в ячейке на пересечении говорит о том, сколько символов могут показать такую пару яркостей):
Code:
  | 0 1 2 3 4 5 6 7 8 9 A B C D E F
-----------------------------------
0 | F 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1
1 | 0 0 0 1 2 2 2 0 0 0 0 0 0 0 0 0
2 | 0 0 3 2 0 0 2 3 2 0 0 0 0 0 0 0
3 | 1 0 2 2 0 1 2 1 0 0 0 0 1 0 0 1
4 | 0 0 0 0 1 3 4 2 2 0 1 0 0 0 0 0
5 | 1 0 1 3 0 4 3 8 0 2 2 0 0 0 0 0
6 | 0 0 0 1 3 0 2 5 4 1 0 1 0 0 0 0
7 | 0 0 0 0 0 3 3 3 0 1 0 0 0 0 0 0
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
A | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
B | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
C | 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
D | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
E | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
F | 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1
Я сейчас пишу программу, которая будет выводить таким способом изображения в градациях серого с разрешением 128х50 путём подстановки кусочков символов стандартного знакогенератора высотой 5 пикселов с накапливанием и корректировкой ошибок.

P.S. Вот для каждой комбинации половинок какие символы (точнее верхние 5 строчек каждого символа) можно взять:
Code:
00: 0x20
03: 0x04
05: !
06: '
0C: 0x02
0F: 0x06
13: /
14: ) >
15: 1 J
16: I ]
22: , : \
23: - ^
26: + ?
27: T Т З
28: 3 Э
30: 0x10
32: ( <
33: 0x14 "
35: Y
36: 2 7
37: *
3C: 0x12
3F: 0x16
44: ;
45: X Х У
46: & = S Д
47: Z Л
48: 4 9
4A: Я
50: L
52: [
53: % C С
55: G U V Ц
56: 6 O О
57: $ 5 8 A Q W А Ч
59: Ж Ш
5A: @ Щ
63: Ь
64: K Г К
66: D Ы
67: H N И Н П
68: 0 M Й М
69: Ю
6B: Ф
75: E F Е
76: P Б Р
77: B R В
79: #
C0: 0x01
C3: 0x05
CC: 0x03
CF: 0x07
F0: 0x11
F3: 0x15
FC: 0x13
FF: 0x17
Я пока выберу последний в каждой строчке...

_________________
:dj: https://mastodon.social/@Shaos


29 Mar 2024 17:49
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Алгоритм может быть такой - идём по картинке слева-направо построчно беря пикселы парами:
- огрубляем яркость первого пиксела в паре до 16 градаций (если от предыдущего шага осталась ошибка, то прибавляем её);
- ищем соответствующую строчку в таблице (для некоторых яркостей точки входа нет - например для 8,9,10,11 берём 12, а для 13 и 14 - берём 15);
- далее выбираем нужное пересечения для второго пиксела в паре огрублённого до 16 градаций яркости (если точного соответствия нет - берём ближайший с меньшим значением);
- ставим соответствующий символ (пока первый подходящий, а потом можно попробовать выбирать лучший из имеющихся);
- считаем ошибку и передаём её дальше (возможно её надо разделить на число от 1.0 до 2.0, чтобы ряд сходился);
- берём следующую пару и т.д.

_________________
:dj: https://mastodon.social/@Shaos


29 Mar 2024 21:48
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Вот чото сделал в первом приближении:

Attachment:
rk-pgraph.jpg
rk-pgraph.jpg [ 85.77 KiB | Viewed 1659 times ]


Если увеличить, то можно увидеть "детали":

Attachment:
Screenshot from 2024-03-31 05-09-10.png
Screenshot from 2024-03-31 05-09-10.png [ 78.87 KiB | Viewed 1659 times ]


Программульку в формате RKR можно взять тут (с исходниками в которых можно увидеть, что буфер экрана увеличен и перенесён на адрес 4000h, причём всё работает без спец-символов):


Attachments:
test_vinxru_5_new.zip [7.04 KiB]
Downloaded 11 times

_________________
:dj: https://mastodon.social/@Shaos
31 Mar 2024 05:28
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Универсальный конвертер практически готов :lol:


Attachments:
Screenshot from 2024-03-31 06-02-15.png
Screenshot from 2024-03-31 06-02-15.png [ 73.61 KiB | Viewed 1653 times ]

_________________
:dj: https://mastodon.social/@Shaos
31 Mar 2024 06:10
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Решил поглядеть какой коэффициент "гашения" ошибки более предпочтителен (на картинке выше оно было 1.5):

 1.0
Начинаю с 1.0 (ошибка не размывается):

Attachment:
rk-pgraph-shaos-1_0.png
rk-pgraph-shaos-1_0.png [ 151.61 KiB | Viewed 1585 times ]


 1.1
Коэффициент 1.1:

Attachment:
rk-pgraph-shaos-1_1.png
rk-pgraph-shaos-1_1.png [ 166.51 KiB | Viewed 1585 times ]


 1.2
Коэффициент 1.2:

Attachment:
rk-pgraph-shaos-1_2.png
rk-pgraph-shaos-1_2.png [ 168.39 KiB | Viewed 1585 times ]


 1.3
Коэффициент 1.3:

Attachment:
rk-pgraph-shaos-1_3.png
rk-pgraph-shaos-1_3.png [ 166.56 KiB | Viewed 1585 times ]


 1.4
Коэффициент 1.4:

Attachment:
rk-pgraph-shaos-1_4.png
rk-pgraph-shaos-1_4.png [ 167.92 KiB | Viewed 1585 times ]


 1.5
Коэффициент 1.5 (как на картинках выше):

Attachment:
rk-pgraph-shaos-1_5.png
rk-pgraph-shaos-1_5.png [ 167 KiB | Viewed 1585 times ]


 1.7
Коэффициент 1.7:

Attachment:
rk-pgraph-shaos-1_7.png
rk-pgraph-shaos-1_7.png [ 165.21 KiB | Viewed 1585 times ]


 2.0
Коэффициент 2.0:

Attachment:
rk-pgraph-shaos-2_0.png
rk-pgraph-shaos-2_0.png [ 166.41 KiB | Viewed 1585 times ]


И теперь особый случай - ошибка не "гасится", но распространяется только на второе полузнакоместо:

 1.0-pair
Attachment:
rk-pgraph-shaos-1_0-pair.png
rk-pgraph-shaos-1_0-pair.png [ 169.05 KiB | Viewed 1585 times ]

Особый случай имитирует алгоритм, который можно реализовать на самом РК для преобразования произвольных изображений в градациях яркости (16 уровней) в такую псевдографику, когда пара точек будет задавать один и только один символ, не распространяя ошибку далее по строке.

По итогам сравнения - как можно видеть коэффициент 1.0 совсем плох, а вот всё остальное (даже 2.0, когда ошибка делится на 2 перед применением к каждому пикселу) выглядит в-принципе ОК, так что я наверное оставлю коэффициент 1.5, которое легко можно изобразить вместо деления на 1.5 как умножение на 2 с дальнейшим делением на 3 т.е. оставаясь в арифметике целых чисел...

_________________
:dj: https://mastodon.social/@Shaos


01 Apr 2024 21:15
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Вот исходник конвертера:
Code:
/*
 rk-pgraph.c - Converting grayscale image 128x50 to RK86 pseudo-graphics by Shaos

 This code is PUBLIC DOMAIN! Use it on your own RISK!!!

 Build: gcc rk-pgraph.c -lpng -ork-pgraph

 http://www.nedopc.org/forum/viewtopic.php?f=93&t=22389&start=45

 24-MAR-2024 - started coding
 31-MAR-2024 - working version ready (ASM)
 02-APR-2024 - released version (ASM and BIN)

*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <png.h>

//#define DEBUG

int count[8] = {
 0, // 000
 1, // 001
 1, // 010
 2, // 011
 1, // 100
 2, // 101
 2, // 110
 3  // 111
};

int hist[256],allz[16];
char chars[256][8];

int main(int argc, char **argv)
{
 int i,j,k,a,b,c,e,e1,e2,x,y,z,z1,z2,hh,h=5,m=0;
 FILE *f,*fb;
 if(argc<2)
 {
   printf("\nrk-pgraph filename.png [lines]\n\n");
   return 0;
 }
 if(argc>2) h=atoi(argv[2]);
 a = 256/(3*h+1);
 f = fopen("sgr.bin","rb");
 if(f==NULL){printf("\nNeed sgr.bin\n\n");return -1;}
 for(i=0;i<256;i++)
 {
   hist[i] = 0;
   for(j=0;j<8;j++) chars[i][j] = 0;
 }
 chars[0][0] = 0x20; // space for blank
 for(i=0;i<127;i++)
 {
   z1 = z2 = 0;
   for(j=0;j<8;j++)
   {
     c = (~fgetc(f))&63;
     if(j>=h) continue;
     if(i>=8 && i<=15) continue;
     if(i>=24 && i<=31) continue;
//     printf("%2.2X\n",c);
     z1 += count[c>>3];
     z2 += count[c&7];
   }
   c = (z1<<4)|z2;
   printf("%i) %i %i (%2.2X)\n",i,z1,z2,c);
   hist[c]++;
   if(c)
   {
     k = 0;
     while(chars[c][k])
     {
        if(++k==8){k=7;break;}
     }
     chars[c][k] = i;
   }
 }
 printf("\n");
 fclose(f);
 c = 0;
 for(j=0;j<16;j++)
 {
   if(j==0)
   {
     printf("  | 0 1 2 3 4 5 6 7 8 9 A B C D E F\n");
     printf("-----------------------------------\n");
   }
   z = 0;
   for(i=0;i<16;i++)
   {
     if(i==0) printf("%X |",j);
     if(i!=0&&j!=0) if(hist[c]>m) m=hist[c];
     hh = hist[c++];
     printf(" %X",(hh>15)?15:hh);
     z += hh;
   }
   allz[j] = (z==0)?1:0;
   printf("\n");
 }
 printf("\nmax num: %i\n\n",m);
 c = 0;
 for(j=0;j<16;j++)
 {
   for(i=0;i<16;i++)
   {
     hh = hist[c];
     if(!hh){c++;continue;}
     printf("%2.2X:",c);
     for(k=0;k<8;k++)
     {
       m = chars[c][k];
       if(k==7) hist[c] = m;
       if(!m)
       {
         if(k) hist[c] = chars[c][k-1]; // choose last one
         break;
       }
       if(m<=0x20) printf(" 0x%2.2X",m);
       else if(m<0x60) printf(" %c",m);
       else switch(m)
       {
         case 0x60: printf(" Ю"); break;
         case 0x61: printf(" А"); break;
         case 0x62: printf(" Б"); break;
         case 0x63: printf(" Ц"); break;
         case 0x64: printf(" Д"); break;
         case 0x65: printf(" Е"); break;
         case 0x66: printf(" Ф"); break;
         case 0x67: printf(" Г"); break;
         case 0x68: printf(" Х"); break;
         case 0x69: printf(" И"); break;
         case 0x6A: printf(" Й"); break;
         case 0x6B: printf(" К"); break;
         case 0x6C: printf(" Л"); break;
         case 0x6D: printf(" М"); break;
         case 0x6E: printf(" Н"); break;
         case 0x6F: printf(" О"); break;
         case 0x70: printf(" П"); break;
         case 0x71: printf(" Я"); break;
         case 0x72: printf(" Р"); break;
         case 0x73: printf(" С"); break;
         case 0x74: printf(" Т"); break;
         case 0x75: printf(" У"); break;
         case 0x76: printf(" Ж"); break;
         case 0x77: printf(" В"); break;
         case 0x78: printf(" Ь"); break;
         case 0x79: printf(" Ы"); break;
         case 0x7A: printf(" З"); break;
         case 0x7B: printf(" Ш"); break;
         case 0x7C: printf(" Э"); break;
         case 0x7D: printf(" Щ"); break;
         case 0x7E: printf(" Ч"); break;
       }
     }
     printf("   \t--> #%2.2X\n",hist[c]);
     c++;
   }
 }
 printf("\n");
 f = fopen(argv[1],"rb");
 if(f==NULL) return -2;
 png_structp png = png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL);
 if(!png) return -3;
 png_infop info = png_create_info_struct(png);
 if(!info) return -4;
 if(setjmp(png_jmpbuf(png))) return -5;
 png_init_io(png,f);
 png_read_info(png,info);
 x = png_get_image_width(png,info);
 y = png_get_image_height(png,info);
 if(png_get_color_type(png,info)!=PNG_COLOR_TYPE_GRAY)
 {
   printf("\nERROR: PNG image must be gray! %i\n\n",png_get_color_type(png,info));
   return -6;
 }
 png_bytep* img = (png_bytep*)malloc(sizeof(png_bytep)*y);
 for(j=0;j<y;j++) img[j] = (png_byte*)malloc(png_get_rowbytes(png,info));
 png_read_image(png,img);
 fclose(f);
 f = fopen("rk-graph.asm","wt");
 if(f==NULL) return -7;
 fb = fopen("rk-graph.bin","wb");
 if(fb==NULL){fclose(f);return -8;}
 png_destroy_read_struct(&png, &info, NULL);
 for(j=0;j<6;j++)
 {
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<64;i++) fprintf(f,"0,");
   fprintf(f,"0,0,0,0,0 ; %i\n",j);
   for(i=0;i<78;i++) fputc(0,fb);
 }
 e = 0;
 for(j=0;j<y;j++)
 {
   if(j>=50) break;
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<9;i++) fputc(0,fb);
   for(i=0;i<x;i++)
   {
      if(i>=128) break;
      c = img[j][i];
      printf("%c"," .:-=+*#%vnmVNM@"[c>>4]);
      e<<=1;e/=3; // the same as /1.5
#ifdef DEBUG
printf(" (%i,%i) brightness before %2.2X e=%i\n",i,j,c,e);
#endif
      c += e;
      e = 0;
      while(c<0){c++;e--;}
      while(c>255){c--;e++;}
#ifdef DEBUG
printf(" (%i,%i) brightness after %2.2X e=%i\n",i,j,c,e);
#endif
      if(i&1)
      { // second pixel in pair
        z2 = c/a;
#ifdef DEBUG
printf(" (%i,%i) z2 before %X\n",i,j,z2);
#endif
        if(z2>=3*h+1) z2=3*h;
        if(hist[(z1<<4)|z2]==0)
        {
          b = -1;
          k = 3*h+1;
          for(z=0;z<=3*h;z++)
          { // test every possibility
            if(hist[(z1<<4)|z])
            {
              if(z > z2)
              {
                if(z-z2<k){k=z-z2;b=z;}
              }
              else
              {
                if(z2-z<k){k=z2-z;b=z;}
              }
            }
          }
          if(b<0) return -9;
          z2 = b;
        }
        e2 = c-z2*a;
        e += e2;
#ifdef DEBUG
printf(" (%i,%i) z2 after %X e=%i --> %i\n",i,j,z2,e2,e);
#endif
        fprintf(f,"%i,",hist[(z1<<4)|z2]);
        fputc(hist[(z1<<4)|z2],fb);
#ifdef DEBUG
printf(" (%i,%i) >>>>>>>>>>>>>>>>>>>>>>> %2.2X\n",i,j,hist[(z1<<4)|z2]);
#endif
      }
      else
      { // first pixel in pair
        z1 = c/a;
#ifdef DEBUG
printf(" (%i,%i) z1 before %X\n",i,j,z1);
#endif
        if(z1>=3*h+1) z1=3*h;
        while(allz[z1]) z1++;
        e1 = c-z1*a;
        e += e1;
#ifdef DEBUG
printf(" (%i,%i) z1 after %X e=%i --> %i\n",i,j,z1,e1,e);
#endif
      }
   }
   printf("\n");
   fprintf(f,"0,0,0,0,0 ; %i\n",j+6);
   for(i=0;i<5;i++) fputc(0,fb);
 }
 while(j<55)
 {
   fprintf(f,"\tdb\t0,0,0,0,0,0,0,0,0,");
   for(i=0;i<64;i++) fprintf(f,"0,");
   fprintf(f,"0,0,0,0,0 ; %i\n",j+6);
   for(i=0;i<78;i++) fputc(0,fb);
   j++;
 }
 fclose(f);
 return 0;
}

Также создал репу Super-86RK куда его и залил:

https://gitlab.com/shaos/super-86rk/-/blob/main/tools/rk-pgraph.c

_________________
:dj: https://mastodon.social/@Shaos


02 Apr 2024 01:10
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Shaos wrote:


А теперь посжимаем бинарный образ этой картинки разными пакерами (и для сравнения - архиваторами):
Code:
-rw-r--r-- 1 shaos shaos  4758 Apr  2 00:59 rk-graph.bin <<<<<< ORIGINAL 78x61
-rw-r--r-- 1 shaos shaos  1473 Apr  2 01:12 rk-graph.bff <<<<<< SHAFF0
-rw-r--r-- 1 shaos shaos  1464 Apr  2 00:59 rk-graph.bin.lz4
-rw-r--r-- 1 shaos shaos  1203 Apr  2 01:12 rk-graph.binFF <<<< SHAFF1
-rw-r--r-- 1 shaos shaos  1196 Apr  2 01:14 rk-graph.zip
-rw-r--r-- 1 shaos shaos  1157 Apr  2 01:13 rk-graph.bin.hst
-rw-r--r-- 1 shaos shaos  1151 Apr  2 01:13 rk-graph.bin.hrm
-rw-r--r-- 1 shaos shaos  1149 Apr  2 01:14 rk-graph.bin.zx7
-rw-r--r-- 1 shaos shaos  1148 Apr  2 00:59 rk-graph.bin.xz
-rw-r--r-- 1 shaos shaos  1143 Apr  2 01:13 rk-graph.bin.mlz
-rw-r--r-- 1 shaos shaos  1128 Apr  2 00:59 rk-graph.bin.bz2
-rw-r--r-- 1 shaos shaos  1127 Apr  2 01:14 rk-graph.bin.zx0
-rw-r--r-- 1 shaos shaos  1088 Apr  2 00:59 rk-graph.bin.gz
Депакер SHAFF0 для 8080 у меня уже имеется и если паковать им, то до 7600h влезет 20 таких картинок
Депакера SHAFF1 для 8080 у меня ещё нету, но если паковать им, то влезет уже 25 картинок
MegaLZ (кто-то уже делал депакер для 8080) даёт 26 картинок (столько же, сколько и самый лучше пакер ZX0)

_________________
:dj: https://mastodon.social/@Shaos


02 Apr 2024 01:35
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
В программе есть теоретическая возможность использования других высот символов (вторым аргументом можно передать число отличное от 5), однако надо кое-что подпилить, чтобы оно полноценно работало - например матрица пар яркостей подразумевает, что их не больше 16, а при 8 линиях их уже будет 8*3+1=25, ну и правильное количество строк надо вычислять в зависимости от выбранной высоты символов (сейчас их всегда 61). Вот например такая матрица пар размером 13х13 получается при высоте символов в 4 пиксела:
Code:
  | 0 1 2 3 4 5 6 7 8 9 A B C
-----------------------------
0 | F 0 0 1 2 0 1 0 0 0 0 0 4
1 | 0 1 0 2 1 2 0 0 0 0 0 0 0
2 | 0 1 3 3 0 4 5 2 0 0 0 0 0
3 | 0 0 0 2 6 1 1 1 0 0 0 0 0
4 | 1 0 1 4 4 7 2 6 3 0 0 0 0
5 | 0 0 1 2 2 2 6 3 0 0 0 0 0
6 | 0 0 0 0 0 4 5 0 0 0 0 0 0
7 | 0 0 0 0 0 0 0 0 0 0 0 0 0
8 | 0 0 0 0 0 0 0 0 0 0 0 0 0
9 | 0 0 0 0 0 0 0 0 0 0 0 0 0
A | 0 0 0 0 0 0 0 0 0 0 0 0 0
B | 0 0 0 0 0 0 0 0 0 0 0 0 0
C | 4 0 0 0 0 0 0 0 0 0 0 0 4
и в 4-пиксельном по высоте варианте только 38 комбинаций вместо 56:

 4px
Code:
00: 0x20        --> #20
03: /           --> #2F
04: ! J         --> #4A
06: '           --> #27
0C: 0x02 0x06 0x12 0x16         --> #16
11: ,           --> #2C
13: ) >         --> #3E
14: 1           --> #31
15: I ]         --> #5D
21: \           --> #5C
22: ( : <       --> #3C
23: - = ^       --> #5E
25: * + 4 ?     --> #3F
26: 2 7 T Т З           --> #7A
27: 3 Э         --> #7C
33: " ;         --> #3B
34: & A X Y А Х         --> #68
35: Д           --> #64
36: Л           --> #6C
37: Z           --> #5A
40: L           --> #4C
42: [           --> #5B
43: % C G С     --> #73
44: U V Ц У     --> #75
45: $ 6 O Q S W О       --> #6F
46: 8 И         --> #69
47: 0 9 @ Й Ж Ш         --> #7B
48: Ф Я Щ       --> #7D
52: Ь           --> #78
53: K К         --> #6B
54: Г Ы         --> #79
55: D N         --> #4E
56: # 5 H Н П Ч         --> #7E
57: M Ю М       --> #6D
65: E F Б Е     --> #65
66: B P R Р В           --> #77
C0: 0x01 0x05 0x11 0x15         --> #15
CC: 0x03 0x07 0x13 0x17         --> #17

_________________
:dj: https://mastodon.social/@Shaos


03 Apr 2024 00:51
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Shaos wrote:
и в 4-пиксельном по высоте варианте только 38 комбинаций вместо 56
Как можно видеть ниже качество при 4-пиксельных символах получается хреновенькое:


Attachments:
Screenshot from 2024-04-04 20-58-44.png
Screenshot from 2024-04-04 20-58-44.png [ 119.53 KiB | Viewed 1402 times ]

_________________
:dj: https://mastodon.social/@Shaos
04 Apr 2024 21:07
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 318
Location: Tashkent
Reply with quote
За использование Вашего набора символов под оттенки серого в этом видео в суд не подадите? :mrgreen:

(Со звуком ещё не разобрался - там всё сложнее.)


06 Apr 2024 06:26
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Ну мой набор символов урезан до 5 пикселов в высоту (и каждый урезанный символ представляет собой пару серых пикселов - левый и правый - и каждый из этих "пикселов" способен передать 16 градаций серого), а на видео - полновесные буквы, да ещё и с дырками между символов :)

А в моих символах будет вот так :mrgreen:


Attachments:
Screenshot from 2024-04-06 11-31-15.png
Screenshot from 2024-04-06 11-31-15.png [ 51.3 KiB | Viewed 1323 times ]

_________________
:dj: https://mastodon.social/@Shaos
06 Apr 2024 11:29
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22591
Location: Silicon Valley
Reply with quote
Вот ещё один кадр, в котором изначально есть градации серого, преобразованный в "мои" 5-пиксельные по высоте символы:

Attachment:
rk-pgraph5-BadApple2.jpg
rk-pgraph5-BadApple2.jpg [ 42.95 KiB | Viewed 1319 times ]

P.S. И ещё один кадр с полутенями ;)

Attachment:
rk-pgraph5-BadApple3.jpg
rk-pgraph5-BadApple3.jpg [ 39.16 KiB | Viewed 1319 times ]


P.S. Продолжение про видео перенесено в новую тему: http://www.nedopc.org/forum/viewtopic.php?f=93&t=22417

_________________
:dj: https://mastodon.social/@Shaos


06 Apr 2024 11:51
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 60 posts ]  Go to page Previous  1, 2, 3, 4

Who is online

Users browsing this forum: Shaos and 69 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.