"Glyph Array", Array Fu, Pointer Fu, 가슴, 폭발 또는 자동차를 쫓지 않는 C -The Hard Way -the Hard Way -the Hard Way - 빠르고 더러운 캐릭터는이 프로젝트에 관한 것입니다. Linux 버퍼를 스크리닝하기 위해 문자를 넣으려고 할 때 데이터 용 디스플레이를 만들고 싶었지만 콘솔의 실제 텍스트는이 프로젝트를 위해 targ에 걸린 Barbones 비 Gui Raspberry Pi에서 너무 작았습니다. 이 프로젝트는 Linux에서 Framebuffer 처리의 좋은 예인 다른 작업을 기반으로합니다. http://raspberrycompote.blogspot.com/2015/01/low-20-graphics-on-raspberry-pi-part.html을 참조하십시오.이 프로젝트에서 수행 한 작업은 문자와 숫자를 나타내는 1과 0의 배열이 생성되었으며,이 배열은 "Set Pixel"이후의 픽셀이시기와 어디에 있는지 여부와 함께 로프를 겪었습니다. 글꼴은 외계인 센트리 총을 기반으로합니다. https://www.youtube.com/watch?v=hqdy-5iqvuu이 데모는 모든 시스템이 빠르지 않고 HDMI 화면 (내 경우에는 과열되는 것이 아닙니다)을 가지고 있다고 가정합니다.
vinfo.bits_per_pixel = 8;
색상 값은 0에서 15까지 범위입니다. 물론 가장 깊은 색이 아닙니다. 이 "깊이"를 올리면 속도를 늦출 수 있지만 더 넓은 범위의 색상이됩니다. 그리고 이것들 :
vinfo.xres = 1184;
vinfo.yres = 624;
화면, HDMI 또는 일부 TFT LCD 일 것입니다. 아마도 /dev /fbn을 오른쪽으로 얻는 한 Linux Framebuffer 루틴이 중요하지 않습니다. 여기서 n은 n 번째 디스플레이 수가 다릅니다. 따라서 화면의 치수와 "깊이"는 다를 수 있습니다. 오래된 누아르 적외선 라즈베리 카메라의 출력을 잘 처리하는 TFT LCD 화면이 있지만 변환없이 X32 비트 맵을 사용해보십시오. 내 목표는 "화면에 텍스트를 얻으십시오"였습니다. 배열은 "Aliens Auto-Gun Font"에 가까운 것을 사용하여 만들어졌으며, 우리가 원하는 위치, X와 Y 및 그 모든 것에 따라 주어진 색상 값으로 픽셀을 설정하고 Glyph 배열의 1 또는 0을 사용하도록 작성된 루틴이 작성되었습니다.
거기에서 다른 루틴이 생겨났습니다 : 문자열 인쇄. 숫자 디스플레이 인쇄. 그리고 경계와 선으로 채워 지거나 속이 빈 사각형.
이 데모는 약간의 애니메이션을 보여 주지만 목표는 아닙니다. 배열과 같이 메모리 공간에 쓰기는 대부분의 그래픽이 작동하는 일종의 "버퍼 플리핑"접근 방식을 사용하여 크기와 색상 깊이의 디스플레이와 같은 색상 값과 같은 메모리 (1990 년대의 오래된 단어)와 동일한 메모리가 화면에 매핑되는 메모리와 동일합니다. 이것은 한 화면에서 다른 화면으로 매우 부드러운 전환을 만듭니다.
따라서 애니메이션은 가능하지만 목표는 아닙니다. "백 버퍼"에 대한 모든 것에 대한 모든 것에 대해 간단한 다음 화면 버퍼에 작성하십시오. Raspberry Foompote의 코드와 같은 이러한 종류의 코드가 다운되면 Back Buffer에게 수행하는 작업은 겸손한 텍스트에서 3D 렌더링에 이르기까지 귀하의 비즈니스입니다.
이 데모는 더 오래되거나 덜 유능한 시스템이 사용될 수 있다고 가정합니다. 그래서 모든 캐릭터는 블록에 있습니다. 배열로 표시되는 실제 글리프는 "배열에 대한 포인터"배열을 통해 "고정"됩니다. 블록 에서이 배열은 배열 데이터에 포인터를 할당하므로 블록이 지나면 해당 객체가 사라집니다. 이를 통해 사용하는 캐릭터를 선택하고 선택하고 나머지는 버릴 수 있습니다. 또한 두 개의 글꼴 크기를 나타내는 두 개의 배열이 있습니다. 각각은 128 개의 요소이며, Nth 요소는 문자의 서명되지 않은 int 값에 해당합니다. 따라서 공간은 요소 32에 있습니다. "S"의 ASCII 값은 83이므로 배열의 83 번째 요소는 S의 배열에 대한 포인터입니다.
더 작은 숫자 배열은 또한 숫자를 나타내는 배열을 가리키는 요소이며, Nth 요소는 0-9 범위입니다. 이것은 우리에게 편지에 사용될 atoi 전화를 절약합니다.
전반적으로 1 세대 단일 코어 라즈베리에서 테스트 된 것은 상당히 빠릅니다. 결과는 다를 수 있습니다. 기본 C 코드도 끝났습니다.
화면에 문자를 만드는 다른 방법이 있습니다. 그러나 나는 유연성과 단순성을 보장하기 위해이 빠르고 더러운 측정을 선택했습니다. 이 코드의 "배열 FU"는 다른 것들에도 유용 할 수 있습니다. 배열은 어떤 종류의 문자 나 번호 또는 글리프 일 필요는 없습니다. 예를 들어 스프라이트 또는 원하는 것이 될 수 있습니다. 사용하는 화면과 프로세서로 제한됩니다.
더 멋진 글꼴을 원한다면 인터넷에 "실제"글꼴을 사용하여 픽셀로 변환하는 데모가 있습니다. 이를 프로그램과 같은 배열로 가져올 수있는 경우 비트 맵을 읽고 색상 값 배열로 전환하면이 프로그램의 글꼴로 사용할 수 있습니다. 코드로 2D 어레이로 표시되는이 모든 것은 실제로 1D 어레이임을 명심하십시오. 따라서 배열의 치수가 무엇인지 미리 알아야합니다. 이 데모의 어레이는 수동으로 만들어졌습니다. 전체 ASCII 범위 -128 자 범위는 완료되지 않았습니다. 따라서 소문자 및 구두점과 같이 존재하지 않는 것을 원한다면 직접 만들어야합니다. 추가 참고 사항 : 800x600 해상도가있는 BeagleBone의 데비안 설치에 세분화 오류가 나타납니다. 그러나 동일한 HDMI 화면을 사용하고 있습니다. 궁금한. 결과는 시스템 및 OS에 따라 다릅니다. BeagleBone에서 더 낮은 기본 픽셀 깊이를 얻고 있습니다. 두 시스템 모두 비 GUI 시스템입니다 (GUI는 주부입니다). Rasperry에서 잘 작동하는 YRES * 2 트릭에서 "확장 된"버퍼를 제거하면 초기화 오류가 제거되었고 Atari 2600 Flicker와 동일한 온화한 애니메이션을 허용합니다. 나는 구식 길에서 스크리닝하기 위해 "블리트"에 글을 쓰기위한 별도의 배열이 대신 효과가있을 수 있다고 생각합니다. 나는 이것을 실험 할 것입니다. 그래픽의 해상도는 Debian Beaglebone만이 나에게 향수를 느낍니다. 또한 Raspberry Pi에서 사용한 것과 동일한 "픽셀 깊이"로 버퍼에 픽셀을 넣을 때 여전히 색상으로 15를 넘어갈 수 있습니다. 라즈베리는 그것에 질식하지만 비글 뼈는 아닙니다. 이것은 더 많은 색상 옵션을 허용합니다. 모든 시스템은 다르므로 항상 실험해야합니다. 이 코드를 즐기십시오.